我的填充 QTreeView 的代码中是否存在错误?
我正在使用 PyQt 4.4。
最好使用一些图片来展示。 所有节点都应具有从 0 到 99 的叶子。它们使用 canFetchMore()
和 fetchMore()
增量加载。 但由于某种我不知道的原因,这只适用于根节点。 (图 1)
如果我折叠并展开一个节点,它会加载额外的 10 个值。 (图 2 和 3)
同样奇怪的是,它加载了 10 个值,因为每次调用 fetchMore()
代码只加载 5 个值,这意味着在代码停止加载更多值之前会调用该函数 2 次数据。
我编写了一个小示例来演示该问题,只需使用 python test.py 运行它即可。 http://snipt.org/lLh
有谁知道导致此错误的原因是什么?
I'm using PyQt 4.4.
It's best shown using some pictures. All nodes should have leafs from 0 to 99. They are being incrementally loaded using canFetchMore()
and fetchMore()
. But for some reason unknown for me this works only for the root node. (Picture 1)
If I collapse and expand a node it loads additional 10 values. (Picture 2 & 3)
It's also strange, that it loads 10 values, as the code loads only 5 per call to fetchMore()
, meaning this gets called 2 times before the code stops to load more data.
I've written a small example to demonstrate the problem, just run it with python test.py
.
http://snipt.org/lLh
Does anyone know what causes this error?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我查看了 QAbstractItemView 和 QTreeView 的 Qt 源代码(v4.5,尽管我不希望 v4.4 和 v4.5 之间有太大区别),我认为它们不支持子节点的增量延迟加载。
QAbstractItemView 没有树的概念,因此它只在最上面的索引上调用 fetchMore() 。 当以下情况时,它会调用 fetchMore():
QTreeView 在以下情况下还会调用
fetchMore()
:fetchMore()
的唯一一次)expandAll()
和collapseAll()
我认为最好的解决方案是子类化 QTreeView 以使其调用
fetchMore()< /code> 在适当的位置并使用适当的索引。
I took a look at the Qt source (v4.5, though I don't expect much difference between v4.4 and v4.5) for QAbstractItemView and QTreeView, and I don't think they support incremental lazy loading of child nodes.
QAbstractItemView has no notion of trees, so it only calls
fetchMore()
on the top most index. It callsfetchMore()
when:QTreeView additionally calls
fetchMore()
when:fetchMore()
with a non-root index)expandAll()
andcollapseAll()
I think the best solution would be to subclass QTreeView to make it call
fetchMore()
in the appropriate places and with the appropriate indices.