【问题标题】:Updating a QListView when objects change externally当对象在外部发生变化时更新 QListView
【发布时间】:2009-12-05 01:28:34
【问题描述】:

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

谢谢。

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

【问题讨论】:

    标签: qt qtreeview


    【解决方案1】:

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

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

    【讨论】:

    • “如果您正在实现自己的模型(QAbstractItemView 的派生类),”我认为您的意思是 QAbstractItemModel 的派生类。
    猜你喜欢
    • 1970-01-01
    • 2013-07-03
    • 2018-07-24
    • 1970-01-01
    • 2017-09-29
    • 2017-12-07
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多