如何从 QGraphicsScene 项目中获取 QWidget?
How to get QWidget from QGraphicsScene item?
我已将 QTextEdit 添加到 QGraphicsScene。
现在如何访问小部件的属性和方法?
QGraphicsScene scene;
QTextEdit *te=new QTextEdit();
scene.addWidget(te);
................................
foreach(auto item,scene.items()) {
auto te=(QTextEdit*)item;
auto isReadOnly=te->isReadOnly(); // Error
}
QGraphicsScene::addWidget
returns a QGraphicsProxyWidget
,顾名思义,它充当添加的小部件的代理(在本例中为您的 QTextEdit
)。所以你可以保存代理以备后用...
QGraphicsScene scene;
auto *proxy = scene.addWidget(new QTextEdit);
或者,在遍历项目时,使用类似于...
for (const auto *item: scene.items()) {
if (const auto *proxy = dynamic_cast<const QGraphicsProxyWidget *>(item)) {
if (const auto *te = dynamic_cast<const QTextEdit *>(proxy->widget())) {
auto isReadOnly = te->isReadOnly();
}
}
}
我已将 QTextEdit 添加到 QGraphicsScene。 现在如何访问小部件的属性和方法?
QGraphicsScene scene;
QTextEdit *te=new QTextEdit();
scene.addWidget(te);
................................
foreach(auto item,scene.items()) {
auto te=(QTextEdit*)item;
auto isReadOnly=te->isReadOnly(); // Error
}
QGraphicsScene::addWidget
returns a QGraphicsProxyWidget
,顾名思义,它充当添加的小部件的代理(在本例中为您的 QTextEdit
)。所以你可以保存代理以备后用...
QGraphicsScene scene;
auto *proxy = scene.addWidget(new QTextEdit);
或者,在遍历项目时,使用类似于...
for (const auto *item: scene.items()) {
if (const auto *proxy = dynamic_cast<const QGraphicsProxyWidget *>(item)) {
if (const auto *te = dynamic_cast<const QTextEdit *>(proxy->widget())) {
auto isReadOnly = te->isReadOnly();
}
}
}