我的代码中是否存在填充QTreeView的错误?

Geo*_*lly 3 qt pyqt qtreeview

我正在使用PyQt 4.4.

使用一些图片最好显示.所有节点都应该有从0到99的叶子.它们使用canFetchMore()和递增加载fetchMore().但由于某些原因我不知道这只适用于根节点.(图片1)

如果我折叠并展开一个节点,它会加载额外的10个值.(图2和3)

同样奇怪的是,它加载10个值,因为代码每次调用只加载5个fetchMore(),这意味着在代码停止加载更多数据之前会调用2次.

截屏1 http://i27.tinypic.com/ezyic.png 截屏2 http://i32.tinypic.com/2ymunpx.png 截屏3 http://i27.tinypic.com/283zfr.png

我写了一个小例子来演示这个问题,然后运行它python test.py. http://snipt.org/lLh

有谁知道导致此错误的原因是什么?

ric*_*dwb 6

我看了Qt源代码(v4.5,虽然我不希望v4.4和v4.5之间有太大的区别)对于QAbstractItemView和QTreeView,我不认为它们支持子节点的增量延迟加载.

QAbstractItemView没有树的概念,所以它只调用fetchMore()最顶层的索引.它呼叫fetchMore()时:

  • 几何图形已更新
  • 滚动条移动
  • 行插入
  • 由于自动滚动拖放操作,当前项目已更改

QTreeView还在以下时间调用fetchMore():

  • 扩展一个项目(这基本上是它fetchMore()使用非根索引调用的唯一时间)
  • 视图的布局需要重新设置,例如with expandAll()collapseAll()

我认为最好的解决方案是将QTreeView子类化,使其fetchMore()在适当的位置调用并使用适当的索引.