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

Share array or list between C++ and QML via property

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

当前列表定义为:

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

但 QML 仅采用 cards 初始值(空列表)并且以后不会 "notice" 在其中进行任何更改。

是否需要 NOTIFY 信号是可选的。我想这是为了当我们需要故意让 QML 知道数据已准备好但数据将在读取数据时被消耗。除此之外,我们几乎总是可以避免编程 NOTIFY。我什至执行 rootItem->setProperty("propertyName", value) 偶尔将新值推入 QML,尤其是当 onPropertyNameChanged 处理程序准备就绪时。

以下内容可能会满足您的要求。或者它是必需的,并向其添加 NOTIFY 也不会造成伤害,但会添加 'inoperability'.

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。我从那里使用留言板概念。