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 даже если вы измените модель вида. Индекс связан с моделью и не зависит от вида (вы можете отобразить ту же модель на нескольких видах).

Другие вопросы по тегам