如何从 C++ 中检索 QML 属性的值?
Posted
技术标签:
【中文标题】如何从 C++ 中检索 QML 属性的值?【英文标题】:How to retrieve the value of a QML property from C++? 【发布时间】:2017-09-01 20:43:30 【问题描述】:我在main.qml
中定义了以下QQuickItem
。
Flickable
id: my_quick
Accessible.name: "my_quick_item_name"
objectName: "myquickitem"
enabled: true
property real quickProperty: 1.0
我在 C++ 端通过以下方式获得my_quick
对象。
QQuickItem * my_quick_ptr = QmlEngine_Ptr->rootObjects()[0]->findChild<QQuickItem*>("myquickitem");
如何使用my_quick_ptr
将quickProperty
的当前值设置到C++ 端?
【问题讨论】:
【参考方案1】:如果你指的是 QML 属性,你可以使用这种方法:
QQmlProperty::read(my_quick_ptr, "quickProperty").toReal()
使用 QObject
的工具也应该适用于 QML 属性:
my_quick_ptr->property("quickProperty").toReal()
另外,findChild
返回一个QObject
,因此您需要进行安全转换以从中获取派生指针:
QQuickItem * my_quick_ptr = qobject_cast<QQuickItem *>(QmlEngine_Ptr->rootObjects()[0]->findChild<QQuickItem*>("myquickitem"));
if (my_quick_ptr) // successfully found and cast, can be safely used
【讨论】:
谢谢,您能否将您的答案与我的问题中的示例代码内联?我正在使用qreal
和 objectName 为 myquickitem
并且属性名称是 quickProperty
@dtech,在 Qt 6.2.0 上,我在 qobject_cast
行上收到此警告“不要在临时 [clazy-detaching-temporary] 上调用 QList::operator[]()”。 以上是关于如何从 C++ 中检索 QML 属性的值?的主要内容,如果未能解决你的问题,请参考以下文章
Qt Quick - 如何仅通过 c++ 代码与 qml 属性交互
在 C++ 中循环读取 QML 对象(CheckBox)属性:总是相同的值