Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Portuguese
  4. Alterar a propriedade de um objeto QML pelo C++
Forum Updated to NodeBB v4.3 + New Features

Alterar a propriedade de um objeto QML pelo C++

Scheduled Pinned Locked Moved Solved Portuguese
2 Posts 1 Posters 1.6k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    Jhonny
    wrote on last edited by
    #1

    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"
        }
    }
    
    1 Reply Last reply
    0
    • J Offline
      J Offline
      Jhonny
      wrote on last edited by
      #2

      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

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved