【问题标题】:How to retrieve the value of a QML property from C++?如何从 C++ 中检索 QML 属性的值?
【发布时间】: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++ 端?

【问题讨论】:

    标签: qt qml qquickitem


    【解决方案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[]()”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2013-05-22
    • 1970-01-01
    • 2018-10-06
    • 2023-03-10
    相关资源
    最近更新 更多