qml从c ++设置文本属性
Posted
技术标签:
【中文标题】qml从c ++设置文本属性【英文标题】:qml set text property from c++ 【发布时间】:2018-12-11 08:19:40 【问题描述】:我正在使用 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++");
但它显示以下错误: 断言:文件 /usr/include/qt5/QtCore/qlist.h 中的“!isEmpty()”,第 345 行
请帮忙?
【问题讨论】:
*
周围的 "textObject"
是什么?
@Jiu 只是尝试一下让它变粗,我会更新帖子
使用您加载 QML 的 QQmlApplicationEngine
来搜索对象。而不是在堆栈上创建一个空引擎...
怎么用,不好意思我是新手
doc.qt.io/qt-5/qqmlapplicationengine.html 如果你了解QQmlApplicationEngine
是什么,你就会明白问题所在。
【参考方案1】:
你使用的引擎里面什么都没有,它是当场创建的,没有加载任何东西,因此根对象列表是空的。
您需要引用实际用于 QML 代码的 qml 引擎。在main.cpp
中创建的那个,所以你必须在main 之外使用它的类中传递并保留一个指向它的指针。
另外,请记住,从 C++ 进入 QML 几乎总是糟糕的设计。只是尝试一下也没关系,但在实际生产中,正确的做法是将 QML 连接到 C++。
【讨论】:
以上是关于qml从c ++设置文本属性的主要内容,如果未能解决你的问题,请参考以下文章
设置为 nil 或 "" 时的 UILabel 文本属性使 UILabel 从视图中消失(Swift / Autolayout / iOS9.1)