如何从 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();
        }
    }
}