Alterar a propriedade de um objeto QML pelo C++
Solved
Portuguese
-
Estou tentando realizar a alteração de uma propriedade de um objeto (Rectangle) que foi instanciado no QML, porém não estou conseguindo realiza-lo pois o método findChild retorna null.
Eu estou seguindo as seguintes documentações:
-Interacting with QML Objects from C++
Main
#include <QApplication> #include <QDebug> int main(int argc, char *argv[]) { QApplication app(argc, argv); QQmlApplicationEngine engine(QUrl("qrc:/main.qml")); QQmlContext *ctxt = engine.rootContext(); QObject *rect = ctxt->findChild<QObject*>("rect"); if (rect) rect->setProperty("color", "blue"); return app.exec(); }
QML
ApplicationWindow { id: app title: "Redi" width: 640 height: 480 visible: true visibility : "Maximized" Rectangle{ y:100 x:100 width: 100 height: 100 objectName: "rect" } }
-
Descobri uma solução, mas não consegui entender o porque o método findChild retorna null. Ao realizar alguns testes percebi que o método rootObjects me retornava um objeto que possuía o mesmo objectname do formulário que possui o objeto que quero alterar a propriedade e deste modo que retorna a janela eu consegui realizar a alteração da propriedade e realizar a busca de outros objetos.
Basicamente o fonte ficou desta maneira.
Main
#include <QApplication> #include <QQmlApplicationEngine> #include <QQmlContext> #include <QQuickView> #include <QQuickItem> int main(int argc, char *argv[]) { QApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); QObject *rect = engine.rootObjects().first()->findChild<QObject *>("rect");//Alerado de rootContext para rootObjects if (rect) rect->setProperty("color", "blue"); return app.exec(); }
Resultado