Question

J'utilise PYQT 4.4.

Il est mieux montré en utilisant des images. Tous les nœuds doivent avoir des feuilles de 0 à 99. Ils sont chargés de manière incrémentielle en utilisant canFetchMore() et fetchMore(). Mais pour une raison quelconque, inconnu pour moi, cela ne fonctionne que pour le nœud racine. (Image 1)

Si je m'effondre et développer un nœud, il charge 10 valeurs supplémentaires. (Photo 2 et 3)

Il est également étrange, qu'il charge 10 valeurs, car le code ne charge que 5 par appel à fetchMore(), ce qui signifie que cela est appelé 2 fois avant que le code ne s'arrête pour charger plus de données.

Screenshot 1 Screenshot 2 Screenshot 3

J'ai écrit un petit exemple pour démontrer le problème, il suffit de l'exécuter avec python test.py. http://snipt.org/llh

Quelqu'un sait-il ce qui cause cette erreur?

Était-ce utile?

La solution

J'ai jeté un coup d'œil à la source QT (v4.5, bien que je ne m'attende pas à beaucoup de différence entre V4.4 et V4.5) pour QabStractItemView et QTreeView, et je ne pense pas qu'ils prennent en charge le chargement paresseux incrémentiel des nœuds enfants.

QabStractItemView n'a pas de notion d'arbres, donc il n'appelle que fetchMore() sur le plus grand index. Il appelle fetchMore() lorsque:

  • La géométrie est mise à jour
  • Les barres de défilement sont déplacées
  • Les lignes sont insérées
  • L'élément actuel est modifié à la suite d'une opération de glisser-déposer automatiquement

QTreeView appelle en plus fetchMore() lorsque:

  • Un élément est élargi (c'est essentiellement la seule fois qu'il appelle fetchMore() avec un index non racine)
  • La disposition de la vue doit être rejetée, comme avec expandAll() et collapseAll()

Je pense que la meilleure solution serait de sous-classe QTreeview pour l'appeler fetchMore() Dans les endroits appropriés et avec les indices appropriés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top