私は多くのアイテムを持つカスタムツリーモデルを持っています。それはトップレベルの下の最初のレベルで1000000以上のアイテムを持っています。 QTreeView
でこのレベルを展開すると、アイテムが表示されていなくても、これらのアイテムのそれぞれについてmodel.hasChildren()
が呼び出されます(下にスクロールして表示する必要があります)。問題は、私の関数hasChildren()
が特に百万回呼び出されたときに時間がかかることです(PySide/PyQtでは約10秒かかります)。私の質問は次のとおりです。hasChildren()
は、項目が拡張可能(子がある場合)であるかどうかを知る必要があるため、hasChildren()
が呼び出されることを理解しています。しかし、なぜそれは目に見えないアイテム(私は目に見える範囲内になく、スクロールした後にしか見えないものを意味する)が呼び出されているのですか?私の見解では、アイテムが目に見えるようになるときにだけ呼び出されるべきです。私はsomethigが欠けていますか?QTreeViewは、不可視アイテムの場合でもQAbstractItemModel :: hasChildren()を呼び出します
2)この問題を回避するにはどうすればよいですか?
[モデルサブクラスのリファレンス](https://doc.qt.io/qt-4.8/model-view-programming.html#model-subclassing-reference)の「モデルデータのレイジー集団」セクションを読んでください。 ? – ekhumoro