每当我Q_PROPERTY
在 Qml 中创建一个供以后使用时,我总是创建一个通知信号来告诉 qml 数据已更改并且需要重新评估。
现在有了一个Q_PROPERTY
类型QQmlListProperty<T>
,我怎么能表示一个项目已被修改、添加或删除?
这甚至可能吗?
每当我Q_PROPERTY
在 Qml 中创建一个供以后使用时,我总是创建一个通知信号来告诉 qml 数据已更改并且需要重新评估。
现在有了一个Q_PROPERTY
类型QQmlListProperty<T>
,我怎么能表示一个项目已被修改、添加或删除?
这甚至可能吗?
如果您有一个列表,则不会有propertyChanged()
信号,因为存储的对象引用将保持不变。
在列表中不会有属性,因此不会发出信号。
QAbstractListModel
您可以改为使用旨在处理此问题的后代,通过将附加、插入等方法包装在自己的方法中,然后发出一个dataChanged
信号,该信号携带查找更改所需的信息。
当然,您可以通过将 a 包装QList
在另一个对象中来自己实现类似的东西,该对象具有通知您数据更改的信号。然而,这并不能很好地与 QML 作为真实模型集成,因为至少视图会在dataChanged
收到信号时自动更新,甚至只更新必要的内容。
不是这样,如果 的model
直接View
更改,可能会发生,如果您手动调用modelChanged()
. 在这种情况下,View
它将丢失有关更改部分的信息,因此它将完全重新创建自己。