2016-03-18 15 views
0

У меня есть QTreeView, к которому я привязал пользовательскую модель.setModel на инвалидах QTreeView предыдущей модели?

В моем коде, я:

treeView->setModel(modelPtr) 

... 

... 

... 

treeView->setModel(modelPtr) 

Могу ли я рассчитывать, что после 2-го setModel() вызова, модель индексов будет оставаться такой же, как после 1-го вызова setModel()?

Я где-то читал, что они не могут полагаться и могут измениться.

a) Пожалуйста, подтвердите правильность этого понимания.

Просить экспертов этого форума подтвердить и добавить любую другую важную информацию, связанную с тем, что индекс модели может быть признан недействительным.

b) Предположим, я прикрепил свое древовидное представление к модели.

_dtreeView->setModel(modelPtr) 

Затем я прикрепить ее к прокси-модели:

_dtreeView->setModel(_proxyModelPtr) 

ли индекс модели элемента в модели, представленной modelPtr остается таким же, даже после установки вида прокси-модель?

Я думаю, что он остался бы таким же, поскольку представление было изменено на прокси-модель, но фактическая модель не изменилась.

Просьба экспертов подтвердить это.

ответ

1

Невозможно сэкономить QModelIndex. В документации указано:

Примечание: Индексы моделей следует использовать немедленно, а затем отбрасывать. Вы не должны полагаться на индексы, чтобы оставаться в силе после вызова модели функций, которые изменяют структуру модели или удаляют элементы. Если вам нужно поддерживать индекс модели с течением времени, используйте QPersistentModelIndex.

См. QModelIndex и QPersistentModelIndex.

Вы можете хранить QPersistentModelIndex. Если модель остается действительной (не удаляется), вы можете положиться на QPersistentModelIndex, даже если вы измените модель представления. Индекс связан с моделью и не зависит от вида (вы можете отобразить одну и ту же модель для большего количества просмотров).

 Смежные вопросы

  • Нет связанных вопросов^_^