setModel на QTreeView инвалиды предыдущих модельных индексов?
У меня есть QTreeView, к которому я прикрепил пользовательскую модель.
В моем коде я делаю:
treeView->setModel(modelPtr)
...
...
...
treeView->setModel(modelPtr)
Могу ли я рассчитывать, что после 2-го setModel()
вызов, модельные индексы останутся такими же, как и после 1-го вызова setModel()
?
Я где-то читал, что на них нельзя положиться, и они могут измениться.
а) Пожалуйста, подтвердите, если это понимание верно.
Попросите экспертов этого форума подтвердить и добавить любую другую важную информацию, связанную с тем, когда модельный индекс может быть признан недействительным.
б) Предположим, я прикрепил дерево к модели.
_dtreeView->setModel(modelPtr)
Затем я присоединяю его к модели прокси:
_dtreeView->setModel(_proxyModelPtr)
Будет ли модельный индекс элемента в модели, представленной modelPtr
остаются прежними даже после установки вида на модель прокси?
Я думаю, что он останется таким же, так как представление было изменено на модель прокси, но фактическая модель не изменилась.
Запросите экспертов, пожалуйста, подтвердите.
1 ответ
Это не безопасно, чтобы сохранить QModelIndex
, В документации сказано:
Примечание. Модельные индексы должны использоваться немедленно, а затем отбрасываться. Не следует полагаться на то, что индексы остаются действительными после вызова функций модели, которые изменяют структуру модели или удаляют элементы. Если вам нужно сохранить модельный индекс с течением времени, используйте QPersistentModelIndex.
Смотрите QModelIndex и QPersistentModelIndex.
Вы можете хранить QPersistentModelIndex
, Если модель остается действительной (не удалена), вы можете положиться на QPersistentModelIndex
даже если вы измените модель вида. Индекс связан с моделью и не зависит от вида (вы можете отобразить ту же модель на нескольких видах).