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

问题描述 投票:3回答:1

我正在使用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

有谁知道导致此错误的原因是什么?

qt pyqt qtreeview
1个回答
6
投票

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

QAbstractItemView没有树的概念,因此它只在最顶层的索引上调用fetchMore()。它在下列时间调用fetchMore()

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

在下列情况下,QTreeView还会调用fetchMore()

  • 扩展一个项目(这基本上是它用非根索引调用fetchMore()的唯一时间)
  • 视图的布局需要重新设置,例如expandAll()collapseAll()

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

© www.soinside.com 2019 - 2024. All rights reserved.