通过属性在C ++和QML之间共享数组或列表

时间:2015-05-26 21:26:37

标签: c++ list properties qml

C ++类中有一个无符号整数的列表。可以通过某种方式在类中修改列表。有一个QML对象必须使用此列表。我应该如何声明列表以使对象能够使用列表中的值,并在更改C ++中列表的内容后在QML中获取适当的值?

目前,该列表定义为:

QVariantList cards; Q_PROPERTY(QVariantList cards MEMBER cards NOTIFY setChanged) void setChanged ( QVariantList const &cards );

但是QML仅获取cards初始值(空列表),并且稍后没有“注意到”其中的任何更改。

1 个答案:

答案 0 :(得分:1)

需要NOTIFY信号是可选的。我想这是因为我们需要故意让QML知道数据已准备好但数据在读取数据时会消耗掉。除此之外,我们几乎总能避免编程NOTIFY。我甚至做rootItem-> setProperty(" propertyName",value)偶尔将新值推入QML,特别是如果onPropertyNameChanged处理程序准备好了。

以下可能会做你想要的。或者它是必需的,并且为那些不受伤害的人添加了NOTIFY,但增加了“不可操作性”。

class MyMsgBoard : public QObject
{
public:
    Q_PROPERTY(QVariantList cards READ cards WRITE setCards)
    const QVariantList & cards() const { return qvList; }
    void setCards(const QVariantList & v) { qvList = v; }
private:
    QVariantList qvList;
};

更详细explanation。我从那里使用留言板概念。