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

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

本文关键字:共享 之间 数组 列表 QML 属性 c++      更新时间:2023-10-16

c++类中有一个unsigned int类型的列表。可以在类内部以某种方式修改列表。有一个QML对象必须使用这个列表。我应该如何声明列表,使对象能够使用列表中的值,并在c++中更改列表的内容后,在QML中获得适当的值?

当前列表定义为:

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

但是QML只接受cards的初始值(空列表),并且不会"注意"到之后里面的任何变化。

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

下面可能会做你想要的。或者是必需的,添加NOTIFY也不会造成伤害,但会增加' in操作性'。

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;
};

更详细的说明。我使用留言板的概念,从那里