0

我已将 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
}
4

1 回答 1

1

QGraphicsScene::addWidget返回一个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();
        }
    }
}
于 2022-02-14T17:29:24.057 回答