QPersistentModelIndexes
son (fila, columna, elemento principal) las referencias a los elementos que se actualizan automáticamente cuando los elementos a los que se hace referencia se mueven dentro del modelo, a diferencia del QModelIndex
normal.
Por ejemplo, si inserta una fila, todos los índices persistentes existentes colocados debajo del punto de inserción tendrán su propiedad row
incrementada en uno.
No puede usarlos directamente, pero QTreeView
lo hace, para realizar un seguimiento de los elementos expandidos y los elementos seleccionados, por ejemplo.
Y para que estos índices persistentes se actualicen, debe llamar a las funciones QAbstractitemModel::beginInsertRows()
y endInsertRows()
alrededor de la (s) inserción (es) de fila real cuando agrega registros nuevos.
ver el final de la sección acerca de las clases del modelo de subclases para más detalles: http://doc.trolltech.com/latest/qabstractitemmodel.html#subclassing
me encontré con este método QAbstractItemModel::persistentIndexList
y estoy preguntándose qué índices se debe devolver. Todos ellos ?
¿Debería este método devolver todos los nodos actualmente visibles en TreeView?
Ese método devuelve sólo los índices para los cuales un QPersistentIndexModel
se creó y se encuentra todavía en el alcance (como una variable local, un miembro de la clase, o en un QList<QPersistentIndexModel>
por ejemplo).
Los nodos ampliados o seleccionados no son necesariamente visibles en ese momento, por lo que no puede (y no debería de todos modos) asumir nada sobre para qué se usan estos índices persistentes.
sólo hay que mantenerlos actualizados, y usted sólo tendrá que utilizar persistentIndexList
para grandes cambios en el modelo, como la clasificación (ver QTreeWidget
modelo interno: QTreeModel::ensureSorted
(link)), para pequeños cambios incrementales que tiene toda la beginXxxRows/beginXxxColumns
and endXxxRows/endXxxColumns
methods.
usaste las señales layoutAboutToBeChanged y layoutChanged en tu modelo? –