QPersistentModelIndexes
- это ссылки (строка, столбец, родитель) на элементы, которые автоматически обновляются при перемещении ссылочных элементов внутри модели, в отличие от обычной QModelIndex
.
Например, если вы вставите одну строку, все существующие постоянные индексы, расположенные ниже точки вставки, будут иметь свое свойство row
, увеличенное на единицу.
Вы не можете использовать их напрямую, но QTreeView
делаетдля отслеживания расширенных элементов и выбранных элементов, например.
И для обновления этих постоянных индексов необходимо вызывать функции QAbstractitemModel::beginInsertRows()
и endInsertRows()
вокруг фактической вставки строккогда вы добавляете новые записи.
Подробности смотрите в конце раздела о подклассах классов модели: http://doc.trolltech.com/latest/qabstractitemmodel.html#subclassing
Я нашел этот метод QAbstractItemModel::persistentIndexList
, и мне интересно, чтоиндексы это должно вернуть.Все они?
Должен ли этот метод возвращать все узлы, видимые в данный момент в TreeView?
Этот метод возвращает только те индексы, для которых QPersistentIndexModel
был создан и все еще находится в области видимости (каклокальная переменная, член класса или, например, QList<QPersistentIndexModel>
.
Расширенные или выбранные узлы в настоящее время не обязательно видны, поэтому вы не можете (и не должны) предполагать, что этопостоянные индексы используются для.
Вам просто нужно обновлять их, и вам нужно только использовать persistentIndexList
для больших изменений в модели, таких как сортировка (см. QTreeWidget
внутренняя модель: QTreeModel::ensureSorted
(ссылка) ), для небольших инкрементальных изменений у вас есть все методы beginXxxRows/beginXxxColumns
и endXxxRows/endXxxColumns
.