Alterar a propriedade de um objeto QML pelo C++



  • 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:

    -Integrating QML and C++

    -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

    No modo design do Qt Creator
    inserir a descrição da imagem aqui

    Na aplicação
    inserir a descrição da imagem aqui


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.