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

发布于 2024-07-29 07:23:46 字数 886 浏览 7 评论 0原文

我正在使用 PyQt 4.4。

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

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

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

屏幕截图 1 屏幕截图 2 屏幕截图 3

我编写了一个小示例来演示该问题,只需使用 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.

Screenshot 1

Screenshot 2

Screenshot 3

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深海蓝天 2024-08-05 07:23:46

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

QAbstractItemView 没有树的概念,因此它只在最上面的索引上调用 fetchMore() 。 当以下情况时,它会调用 fetchMore():

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

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 calls fetchMore() when:

  • Geometry is updated
  • The scroll bars are moved
  • Rows are inserted
  • The current item is changed as a result of an autoscrolling drag & drop operation

QTreeView additionally calls fetchMore() when:

  • An item is expanded (this is essentially the only time it calls fetchMore() with a non-root index)
  • The view's layout needs to be relaid, such as with expandAll() and collapseAll()

I think the best solution would be to subclass QTreeView to make it call fetchMore() in the appropriate places and with the appropriate indices.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文