【问题标题】:Qt dataChanged signal slower then hide/show the viewQt dataChanged 信号较慢然后隐藏/显示视图
【发布时间】:2014-03-12 13:47:06
【问题描述】:

我实现了自己的 QAbstractItemModel(用于 TreeView)并重写了 setData 方法,这改变了许多孩子。

  • 如果我在大视图上触发一个“dataChanged”信号,它会非常缓慢并且用户界面会冻结。
  • 如果我取消注释信号,它确实很快,但我必须与 ui 交互(因为模型没有通知视图)。
  • 如果我打破模型/视图的概念,并在 TreeView 上调用 hide 然后 show 方法,它会很快并显示所有更改...

为什么隐藏/显示调用有效?

为什么datachanged Signal这么慢?

firstIndex = idx.parent().child(firstChangedIndex.row(), 0)
self.dataChanged.emit(firstIndex, firstIndex)

firstChangedIndex = 最高父级,会发生变化,但可能不是第 2 列

【问题讨论】:

  • 树中有多少项?您是否在树上设置了任何选项?那是什么 Qt 版本,在什么 exact 平台上(操作系统版本、编译器版本、位数)?如果您可以创建一个小的 self contained example 来生成类似大小的虚拟树并触发信号,这将有所帮助。
  • Python 2.6 上的 PyQt 4.8.4,uniformRowHeights = True,正在开发中的示例 ...
  • 太棒了!我会分析它,看看它在哪里陷入困境。
  • 正如我在其他一些答案中所说的,QTreeView 有一个 hack。您应该将无效索引传递给dataChanged。 C++代码是emit dataChanged( QModelIndex(), QModelIndex() );
  • datachanged with invalid QModelIndex 不能解决我的问题......我无法用一个小例子重现它,所以我必须检查我的实现......little_example

标签: performance qt treeview pyqt4


【解决方案1】:

我发现我的错误... Trolltech modelest 已启用... 感谢您提供无效 QModelIndex 的提示......工作得很好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多