2

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

谢谢你。

ps:我想我可以重新加载QTreeView,但是我不知道哪些项目被扩展或哪些被选中。是否有解决此问题并重新加载列表的策略?

4

1 回答 1

8

QTreeView已经处理了底层模型的数据发生变化的情况(即模型已经发出了dataChanged()信号)。这意味着您不需要对视图做任何额外的工作。

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

于 2009-08-26T21:00:04.913 回答