如何从 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_ptrquickProperty 的当前值设置到C++ 端?

【问题讨论】:

【参考方案1】:

如果你指的是 QML 属性,你可以使用这种方法:

QQmlProperty::read(my_quick_ptr, "quickProperty").toReal()

使用 QObject 的工具也应该适用于 QML 属性:

my_quick_ptr-&gt;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 属性的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何检索 QML 相机提要并发送到 C++ 后端

Qt Quick - 如何仅通过 c++ 代码与 qml 属性交互

如何从 C++ 访问 QML ListView 委托项目?

在 C++ 中循环读取 QML 对象(CheckBox)属性:总是相同的值

如何在 QML Canvas 对象中检索 QPainter 对象

从 Python 设置 qml 属性?