对象在外部更改时更新QListView

1 qt qtreeview

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

谢谢.

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

swo*_*ngu 8

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

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

  • “如果您正在实现自己的模型(QAbstractItemView的派生类),”我认为您的意思是QAbstractItemModel的派生类。 (2认同)