来自 C++ 的 qml 设置文本 属性

qml set text property from c++

我正在使用 qt-creator 创建一个快速应用程序 .qml 文件:

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    MenuBar {
           Menu {
               title: "File"
               MenuItem {  objectName: "buttonTest"
                   text: "Open"
              onTriggered: m.open()}

               MenuItem { text: "show data"
                   onTriggered: m.data()
                  }
               MenuItem { text: "Close"
                   onTriggered: Qt.quit()}
           }

       }


    Text {
            id: name
            text: qsTr("no of vertices :")
        }
    Text
    {

        text: "..........."
        objectName: "textObject"

    }
    }

我想通过 c++ class 中的方法设置 "textObject" 的文本 属性 我尝试了以下代码:

void Mine::data()
{
QQmlApplicationEngine engine;
 QObject *rootObject = engine.rootObjects().first();
   QObject *qmlObject = rootObject->findChild<QObject*>("textObject");

     qmlObject->setProperty("text", "Text from C++");

}

但它显示以下错误: 断言:文件 /usr/include/qt5/QtCore/qlist.h 中的“!isEmpty()”,第 345 行

有什么帮助吗?

您正在使用的引擎中没有任何内容,它实际上是当场创建的并且没有加载任何内容,因此根对象列表是空的。

您需要为您的 QML 代码引用您实际使用的 qml 引擎。在 main.cpp 中创建的那个,因此您必须在 类 中传递并保留指向它的指针,以便在 main 之外使用它。

此外,请记住,从 C++ 进入 QML 几乎总是糟糕的设计。如果您只是尝试一下,那没关系,但在实际生产中,正确的做法是将 QML 连接到 C++。