4

每当我Q_PROPERTY在 Qml 中创建一个供以后使用时,我总是创建一个通知信号来告诉 qml 数据已更改并且需要重新评估。

现在有了一个Q_PROPERTY类型QQmlListProperty<T>,我怎么能表示一个项目已被修改、添加或删除?

这甚至可能吗?

4

1 回答 1

2

如果您有一个列表,则不会有propertyChanged()信号,因为存储的对象引用将保持不变。
在列表中不会有属性,因此不会发出信号。

QAbstractListModel您可以改为使用旨在处理此问题的后代,通过将附加、插入等方法包装在自己的方法中,然后发出一个dataChanged信号,该信号携带查找更改所需的信息。

当然,您可以通过将 a 包装QList在另一个对象中来自己实现类似的东西,该对象具有通知您数据更改的信号。然而,这并不能很好地与 QML 作为真实模型集成,因为至少视图会在dataChanged收到信号时自动更新,甚至只更新必要的内容。

不是这样,如果 的model直接View更改,可能会发生,如果您手动调用modelChanged(). 在这种情况下,View它将丢失有关更改部分的信息,因此它将完全重新创建自己。

于 2017-07-25T14:45:42.637 回答