3

私はPyQt4.4を使用しています。

いくつかの写真を使用して表示するのが最適です。すべてのノードには0から99までのリーフが必要です。これらはとを使用して増分的にロードされcanFetchMore()ますfetchMore()。しかし、何らかの理由で私にはわかりませんが、これはルートノードに対してのみ機能します。(写真1)

ノードを折りたたんで展開すると、さらに10個の値が読み込まれます。(写真2&3)

また、コードがへの呼び出しごとに5つしかロードしないため、10個の値がロードされることも奇妙です。つまりfetchMore()、コードがさらにデータのロードを停止する前に、これが2回呼び出されます。

スクリーンショット1 スクリーンショット2 スクリーンショット3

問題を示すために小さな例を作成しました。を使用して実行してpython test.pyください。 http://snipt.org/lLh

誰かがこのエラーの原因を知っていますか?

4

1 に答える 1

6

QAbstractItemViewとQTreeViewのQtソース(v4.5とv4.5の間に大きな違いはないと思いますが、v4.5)を調べましたが、子ノードの増分遅延読み込みをサポートしているとは思いません。

QAbstractItemViewにはツリーの概念がないためfetchMore()、最上位のインデックスのみを呼び出します。次の場合に呼び出されますfetchMore()

  • ジオメトリが更新されました
  • スクロールバーが移動します
  • 行が挿入されます
  • 自動スクロールのドラッグアンドドロップ操作の結果、現在のアイテムが変更されます

QTreeViewは、次のfetchMore()場合に追加で呼び出します。

  • アイテムが展開されます(これは基本的に、fetchMore()ルート以外のインデックスで呼び出す唯一の時間です)
  • ビューのレイアウトは、withexpandAll()やなどのように再レイアウトする必要がありますcollapseAll()

最善の解決策は、QTreeViewをサブクラス化してfetchMore()、適切な場所で適切なインデックスを使用して呼び出すようにすることだと思います。

于 2009-07-26T19:49:11.507 に答える