使用信号或 Q_PROPERTY 更新 QML 对象

Posted

技术标签:

【中文标题】使用信号或 Q_PROPERTY 更新 QML 对象【英文标题】:Use signals or Q_PROPERTY to update QML objects 【发布时间】:2016-02-04 14:55:49 【问题描述】:

我经常从服务器接收数据。该数据主要由数字组成。它们中的每一个都对应一个需要更新的 QML 对象。

为了从C++ 文件更新QML 对象,Q_PROPERTYsignals 之间的最佳操作方案是什么?

【问题讨论】:

从 C++ 文件更新 QML 对象? 是的。见Qt Binding documentation 【参考方案1】:

相当不错的方法是使用从 QML 绑定到 C++ 对象。

F.ex.你有数据类,应该作为一些 qml 对象显示给用户。

您拥有包含数据和适当属性的 C++ 类:

class MyData

    Q_OBJECT
    Q_PROPERTY(qreal number READ number NOTIFY numberChanged)
    ....
    //here you implement setter function that emits numberChanged() signal

;

您通过一些帮助类或直接将数据暴露给 qml:

view->rootContext()->setContextProperty("myData", myDataObject);

比你在你的 qml 中使用绑定到对象:

Text 

    text: myData.number 

现在您可以更改 MyData 类对象中的数据,并且您的 qml 会自动更新。

【讨论】:

以上是关于使用信号或 Q_PROPERTY 更新 QML 对象的主要内容,如果未能解决你的问题,请参考以下文章

Q_PROPERTY NOTIFY 信号及其参数

来自其他 QThread 的 Q_PROPERTY 将变量发送到 QML

在 QML 中使用自定义类中的 Q_PROPERTY

Qt:如何在 C++ 端而不是 QML 上监视 Q_PROPERTY 更改

来自 Qt 的 QML 未定义变量

C++ 成员变量类 Q_PROPERTY 在 QML 中不可用