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

标签 c++ list properties qml

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

目前列表定义为:

QVariantList 卡片; Q_PROPERTY(QVariantList 卡成员卡通知 setChanged) void setChanged ( QVariantList const &cards );

但 QML 仅采用 cards 初始值(空列表)并且不会“注意到”其后的任何更改。

最佳答案

是否需要 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 .我使用那里的留言板概念。

关于c++ - 通过属性在 C++ 和 QML 之间共享数组或列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30469241/

相关文章:

java - 如何使用对象名称字段按字母顺序对 List<Object> 进行排序

python - 使用带有多个扩展名的 endwith

c++ - 当按下右上角的十字按钮时,如何隐藏窗口而不是退出?

python - 对 Python 列表中的每个元素执行字符串操作

c# - 如何使用自定义属性属性对类的属性进行排序

python - 有时只读属性

java - 是否有效地弃用了 Java 属性?

c++ - 令人困惑的 C++ 编译器错误, "cannot convert ' X' 返回 'double'

c++ - 检测到属性宽度的 QML 绑定(bind)循环(TextMetrics 行为很奇怪)

c++ - c++中的param和params用法