QPersistentModelIndexes
sono riferimenti (riga, colonna, padre) agli elementi che vengono aggiornati automaticamente quando gli elementi di riferimento vengono spostati all'interno del modello, diversamente dal normale QModelIndex
.
Ad esempio, se si inserisce una riga, tutti gli indici persistenti esistenti posizionati sotto il punto di inserimento avranno la loro proprietà row
incrementata di uno.
Non è possibile utilizzarli direttamente, ma lo è QTreeView
, per tenere traccia degli elementi espansi e degli elementi selezionati, ad esempio.
E per questi indici persistenti da aggiornare, è necessario chiamare le funzioni QAbstractitemModel::beginInsertRows()
e endInsertRows()
attorno agli inserimenti di riga effettivi quando si aggiungono nuovi record.
vedere la fine della sezione sulle classi modello subclassing per i dettagli: http://doc.trolltech.com/latest/qabstractitemmodel.html#subclassing
Ho trovato questo metodo QAbstractItemModel::persistentIndexList
e sono chiedendo cosa gli indici deve restituire. Tutti loro ?
Questo metodo dovrebbe restituire tutti i nodi attualmente visibili in TreeView?
Tale metodo restituisce solo gli indici per cui un QPersistentIndexModel
stata creata ed è ancora portata (come variabile locale, un membro della classe, o in un QList<QPersistentIndexModel>
per esempio).
I nodi espansi o selezionati non sono necessariamente attualmente visibili, quindi non è possibile (e non dovrebbe comunque) assumere nulla riguardo a ciò per cui vengono utilizzati questi indici persistenti.
Devi solo per tenerli aggiornati, e avete solo bisogno di usare persistentIndexList
per i grandi cambiamenti nel modello, come l'ordinamento (vedi QTreeWidget
modello interno: QTreeModel::ensureSorted
(link)), per le modifiche incrementali più piccoli di avere tutte le beginXxxRows/beginXxxColumns
and endXxxRows/endXxxColumns
methods.
hai utilizzato i segnali layoutAboutToBeChanged e layoutChanged nel tuo modello? –