Обновление QListView при внешнем изменении объектов - PullRequest
1 голос
/ 26 августа 2009

У меня есть простой вопрос, касающийся обновления QTreeView (или любого подкласса QAbstractItemView ), когда внешний объект модели изменяется. Скажем, в списке показан подкласс QAbstractItemModel , и элемент этой модели изменяется вне окна списка, и мы хотели бы обновить список с изменением. Какова обычная стратегия достижения чего-то подобного? Я посмотрел на документацию Qt QAbstractItemModel и есть сигнал с именем ' dataChanged ', который генерируется (или должен быть), когда данные из модели изменения. Но поскольку этот сигнал (как и все функции / сигналы / слоты QAbstractItemModel) работает с QModelIndex , который не является постоянным, как ясно сказано в документации, я должен каким-то образом хранить отображение моих данных в QPersistentModelIndex (es), поэтому, когда мои данные изменятся, я смогу найти соответствующий QPersistenModelIndex и использовать его в качестве аргумента для различных QAbstractItemModel функций? Для этого используются QPersistentModelIndex (es)? Или я что-то упустил?

Спасибо.

ps: Полагаю, я мог бы просто перезагрузить QTreeView , но тогда я бы не знал, какие элементы были расширены или какие были выбраны. Есть ли стратегия, чтобы преодолеть эту проблему и просто перезагрузить список?

1 Ответ

8 голосов
/ 27 августа 2009

QTreeView уже обрабатывает случай, в котором изменились данные базовой модели (то есть модель испустила сигнал dataChanged()). Это означает, что вам не нужно выполнять никакой дополнительной работы с представлением.

Если вы реализуете свою собственную модель (производный класс QAbstractItemView) и вносите изменения в содержимое модели, вам просто нужно подать сигнал dataChanged(), когда ваше изменение будет завершено. , Механизм сигнала / слота автоматически информирует вид, используя этот сигнал.

...