QML从C ++设置文本属性

时间:2018-12-11 08:19:41

标签: c++ qt qml qt-creator

我正在使用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 ++类中的方法设置“ textObject”的文本属性 我尝试了以下代码:

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

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

}

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

有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

您所使用的引擎中没有任何东西,它是从字面上直接创建的,并且没有加载任何东西,因此根对象列表为空。

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

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