Performance Qt数据更改信号慢,然后隐藏/显示视图

Performance Qt数据更改信号慢,然后隐藏/显示视图,performance,qt,treeview,pyqt4,Performance,Qt,Treeview,Pyqt4,我实现了自己的QAbstractItemModel(用于TreeView)并重写了setData方法,这改变了许多孩子 如果我在大视图上发出一个“dataChanged”信号,它会非常慢,ui会冻结 如果我取消对信号的注释,它会非常快,但我必须与ui交互(因为模型并没有通知视图) 如果我打破了模型/视图的概念,并在树视图上调用hide-and-show方法,那么速度很快,所有更改都会显示出来 隐藏/显示呼叫为什么有效 为什么数据更改信号如此缓慢 firstIndex = idx.parent

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

  • 如果我在大视图上发出一个“dataChanged”信号,它会非常慢,ui会冻结
  • 如果我取消对信号的注释,它会非常快,但我必须与ui交互(因为模型并没有通知视图)
  • 如果我打破了模型/视图的概念,并在树视图上调用hide-and-show方法,那么速度很快,所有更改都会显示出来
隐藏/显示呼叫为什么有效

为什么数据更改信号如此缓慢

firstIndex = idx.parent().child(firstChangedIndex.row(), 0)
self.dataChanged.emit(firstIndex, firstIndex)
firstChangedIndex=最高父级,这会改变,但可能不是第2列,我发现了我的错误。。。 Trolltech modelest已启用。。。
感谢对无效QModelIndex的提示。。。工作得很好

树中有多少项?你在树上设置了任何选项吗?这是什么Qt版本,在什么平台上(操作系统版本、编译器版本、比特数)?如果您可以创建一个小的、生成类似大小的虚拟树并在Python2.6上激发signal.PyQt 4.8.4,uniformRowHeights=True,示例正在进行中,这会有所帮助……太棒了!我将对它进行分析,看看它在哪里陷入困境。正如我在其他一些答案中所说的,QTreeView有一个黑客程序。您应该将无效索引传递给
dataChanged
。C++代码是代码>发出数据句柄(qMultudix(),qMealDeLimx());代码>
datachanged
无效的QModelIndex无法解决我的问题。。。我不能用一个小例子来重现它,所以我必须检查我的实现。。。