来自 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++。
我正在使用 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++。