3

我正在使用 PyQt 4.4。

最好用一些图片来展示。所有节点都应该有从 0 到 99 的叶子。它们正在使用canFetchMore()和增量加载fetchMore()。但是由于某种我不知道的原因,这仅适用于根节点。(图片1)

如果我折叠并展开一个节点,它会加载额外的 10 个值。(图二、三)

也很奇怪,它加载了 10 个值,因为代码每次调用只加载 5 个fetchMore(),这意味着在代码停止加载更多数据之前,它被调用了 2 次。

截图 1 截图 2 截图 3

我写了一个小例子来演示这个问题,只需使用python test.py. http://snipt.org/lLh

有谁知道是什么导致了这个错误?

4

1 回答 1

6

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

QAbstractItemView 没有树的概念,所以它只调用fetchMore()最顶层的索引。它在以下情况下调用fetchMore()

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

QTreeView 在以下情况下额外调用fetchMore()

  • 展开一个项目(这实际上是它fetchMore()使用非根索引调用的唯一一次)
  • 视图的布局需要relay,比如with expandAll()andcollapseAll()

我认为最好的解决方案是继承 QTreeView 以使其fetchMore()在适当的位置和适当的索引中调用。

于 2009-07-26T19:49:11.507 回答