我正在使用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()”
有什么帮助吗?
答案 0 :(得分:1)
您所使用的引擎中没有任何东西,它是从字面上直接创建的,并且没有加载任何东西,因此根对象列表为空。
您将需要为QML代码引用实际使用的qml引擎。在main.cpp
中创建的那个,因此您必须在main之外使用它的类中传递并保留指向它的指针。
此外,请记住,从C ++到QML几乎总是糟糕的设计。如果您只是尝试一些东西,那没关系,但是在实际生产中,正确的做法是将QML连接到C ++。