gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:45:49 26 4
gpt4 key购买 nike

我使用的是 PyQt 4.4。

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

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

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

Screenshot 1 Screenshot 2 Screenshot 3

我编写了一个小示例来演示该问题,只需使用 python test.py 运行它即可。 http://snipt.org/lLh

有谁知道导致此错误的原因吗?

最佳答案

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

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

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

QTreeView 在以下情况下还会调用 fetchMore():

  • 项目被展开(这实际上是它使用非根索引调用 fetchMore() 的唯一一次)
  • View 的布局需要重新布局,例如使用 expandAll()collapseAll()

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

关于qt - 我的填充 QTreeView 的代码中是否存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com