C'è un bug nel mio codice per popolare un Qtreeview?
Domanda
Sto usando Pyqt 4.4.
È meglio mostrato usando alcune immagini. Tutti i nodi dovrebbero avere foglie da 0 a 99. vengono caricati in modo incrementale usando canFetchMore()
e fetchMore()
. Ma per qualche motivo sconosciuto per me questo funziona solo per il nodo radice. (Immagine 1)
Se crollo ed espando un nodo, carica ulteriori 10 valori. (Immagine 2 e 3)
È anche strano, che carica 10 valori, poiché il codice carica solo 5 per chiamata a fetchMore()
, il che significa che questo viene chiamato 2 volte prima che il codice si interrompa per caricare più dati.
Ho scritto un piccolo esempio per dimostrare il problema, eseguilo con python test.py
.
http://snipt.org/llh
Qualcuno sa cosa causa questo errore?
Soluzione
Ho dato un'occhiata alla sorgente QT (V4.5, anche se non mi aspetto molta differenza tra V4.4 e V4.5) per QabstractItemview e Qtreeview, e non credo che supportino il carico pigro incrementale di nodi figli.
Qabstractemview non ha nozioni di alberi, quindi chiama solo fetchMore()
Sul massimo indice. Chiama fetchMore()
quando:
- La geometria viene aggiornata
- Le barre di scorrimento vengono spostate
- Le righe vengono inserite
- L'elemento corrente viene modificato a seguito di un'operazione di trascinamento automatica
Qtreeview inoltre chiamate fetchMore()
quando:
- Un oggetto viene ampliato (questa è essenzialmente l'unica volta che chiama
fetchMore()
con un indice non root) - Il layout della vista deve essere inoltrato, come con
expandAll()
ecollapseAll()
Penso che la soluzione migliore sarebbe quella di sottoclasse Qtreeview per chiamarlo fetchMore()
nei luoghi appropriati e con gli indici appropriati.