如何在QQmlList属性中正确通知?

How to correctly notify in QQmlListProperty properties?

本文关键字:通知 属性 QQmlList      更新时间:2023-10-16

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

现在有了QQmlListProperty<T>类型的Q_PROPERTY,我该如何发出项目已被修改、添加或删除的信号?

这可能吗?

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

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

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

如果直接更改Viewmodel,则情况并非如此,如果您手动调用modelChanged(),可能会发生这种情况。在这种情况下,View会错过有关更改部件的信息,因此它将完全重新创建自己。