我正在使用PyQt 4.4。
最好使用一些图片显示。所有节点都应具有从0到99的叶子。它们使用canFetchMore()
和fetchMore()
进行增量加载。但由于某些原因我不知道这只适用于根节点。 (图1)
如果我折叠并展开一个节点,它会加载额外的10个值。 (图2和3)
同样奇怪的是,它加载了10个值,因为每次调用fetchMore()
时代码只加载5个,这意味着在代码停止加载更多数据之前会调用2次。
我写了一个小例子来演示问题,只需用python test.py
运行它。
http://snipt.org/lLh
有谁知道导致此错误的原因是什么?
答案 0 :(得分:6)
我看了Qt源代码(v4.5,虽然我不希望v4.4和v4.5之间存在太大差异),但QAbstractItemView和QTreeView并不认为它们支持增量延迟加载子节点。
QAbstractItemView没有树的概念,所以它只在最顶层的索引上调用fetchMore()
。它在以下时间调用fetchMore()
:
QTreeView还会在以下时间调用fetchMore()
:
fetchMore()
)expandAll()
和collapseAll()
我认为最好的解决方案是将QTreeView子类化,使其在适当的位置调用fetchMore()
并使用适当的索引。