对象在外部更改时更新QListView

时间:2009-08-26 19:06:49

标签: qt qtreeview

当模型对象在外部更改时,我有一个关于更新 QTreeView (或 QAbstractItemView 的任何子类)的简单问题。假设一个列表显示了 QAbstractItemModel 的子类,并且该模型的一个项在列表窗口之外被更改,我们希望用更改来更新列表。实现这样的目标的常用策略是什么?我查看了 QAbstractItemModel 的Qt文档,并且有一个名为' dataChanged 的信号,当数据被(或应该)发出时从模型的变化。但是由于这个信号(因为所有QAbstractItemModel函数/信号/插槽)都使用 QModelIndex ,这不是持久的,因为文档清楚地说,我应该以某种方式存储我的数据映射到 QPersistentModelIndex (es),所以当我的数据发生变化时,我将能够找到相应的 QPersistenModelIndex 并将其用作各种 QAbstractItemModel 函数的参数?是 QPersistentModelIndex (es)用于什么?或者我错过了什么?

谢谢。

ps:我想我可以重新加载 QTreeView ,但后来我不知道哪些项目已展开或哪些项目被选中。是否有策略来克服此问题并重新加载列表?

1 个答案:

答案 0 :(得分:8)

QTreeView已经处理了基础模型数据发生变化的情况(即模型发出了dataChanged()信号)。这意味着您无需在视图上执行任何其他工作。

如果您正在实现自己的模型(QAbstractItemView的派生类),并且您正在更改模型的内容,则只需要在发出dataChanged()信号时发出你的改变已经完成。信号/插槽机制将使用该信号自动通知视图。