Gibt es einen Fehler in meinem Code, um eine QTreeview zu bevölkern?
Frage
Ich benutze PYQT 4.4.
Es wird am besten mit einigen Bildern gezeigt. Alle Knoten sollten Leafs von 0 bis 99 haben. Sie werden inkrementell verwendet, indem sie verwendet werden canFetchMore()
und fetchMore()
. Aber aus irgendeinem Grund, der für mich unbekannt ist, funktioniert dies nur für den Stammknoten. (Bild 1)
Wenn ich zusammenbricht und einen Knoten erweitere, wird zusätzliche 10 Werte geladen. (Bild 2 & 3)
Es ist auch seltsam, dass es 10 Werte lädt, da der Code nur 5 pro Anruf zu lädt fetchMore()
, Dies bedeutet, dass dies zwei Mal aufgerufen wird, bevor der Code aufhört, weitere Daten zu laden.
Ich habe ein kleines Beispiel geschrieben, um das Problem zu demonstrieren. Führen Sie es einfach mit python test.py
.
http://snipt.org/llh
Weiß jemand, was diesen Fehler verursacht?
Lösung
Ich habe einen Blick auf die QT -Quelle (V4.5) für QabstractItemView und QTreeview erwarte, obwohl ich keinen großen Unterschied zwischen V4.4 und v4.5 erwarte, und ich glaube nicht, dass sie eine inkrementelle faule Ladung von untergeordneten Knoten unterstützen.
QabstractItemView hat keine Vorstellung von Bäumen, daher ruft es nur auf fetchMore()
im obersten Index. Es ruft fetchMore()
Wenn:
- Die Geometrie wird aktualisiert
- Die Bildlaufleisten werden bewegt
- Zeilen werden eingefügt
- Der aktuelle Element wird aufgrund eines autoscrolling Drag & Drop -Betriebs geändert
Qtreeview zusätzlich Anrufe fetchMore()
Wenn:
- Ein Artikel wird erweitert (dies ist im Wesentlichen das einzige Mal, dass er anruft
fetchMore()
mit einem Nicht-Root-Index) - Das Layout der Ansicht muss relaid sein, wie mit
expandAll()
undcollapseAll()
Ich denke fetchMore()
an den entsprechenden Stellen und mit den entsprechenden Indizes.