Russian Qt Forum

Qt => Model-View (MV) => Тема начата: daenux от Январь 15, 2011, 17:38



Название: Сохранение состояния элементов...
Отправлено: daenux от Январь 15, 2011, 17:38
Приветствую, дорогих форумчан!

Есть одна функция, каторую я незнаю как осуществить так как это принято в мире Qt, суть функции состоит в следующем:
У меня есть представление (для иерархической цепи, объект класса QTreeView) и несколько моделей (объекты наследника класса QAbstractItemModel), программа многорежимная - так вот, как только сменяеться режим (т.е. представление меняет модель), состояния раскрых и выделенных элементов теряються...

Как сохранять состояние представления элементов модели, перед тем как сменить режим, и затем при переходе в предыдущий режим работы программы - сново загрузить состояния элементов?

Мне советовали поработать с QItemSelectionModel, я понял для чего он предназначен, но пользоваться им не получаеться...

К примеру:
Код:
QItemModel *qiModel = new QItemModel(this); // Создаем объект, класса наследника QAbstractItemModel
QItemSelectionModel *qisModel = new QItemSelectionModel(qiModel); // Создаем объекь хранитель выделенных элементов, передавая ему указатель на модель
QTreeView *qtView = new QTreeView(this); // Создаем объект представления
qtView->setModel(qiModel); // Указываем модель представления
qtView->setSelectionModel(qisModel); // Указываем хранитель состояния элементов

// Затем, при смене режима заменяем модель и хранителя у представления (последнии предположим ранее созданы)
qtView->setModel(qiLastModel);
qtView->setSelectionModel(qisLastModel);

// Затем, переходим в предыдущий режим, т.е. указываем предыдущие модель и хранитель представлению
qtView->setModel(qiModel);
qtView->setSelectionModel(qisModel);
//Воаля, ничего не происходит, хотя по логике должны были отобразиться раскрытые и выделенные элементы предыдущего режима (сейсии можно сказать)

Прошу помощи, друзья! :)


Название: Re: Сохранение состояния элементов...
Отправлено: twp от Январь 17, 2011, 14:26
дело в том что модель не хранит данные об раскрытых элементов. Эту информацию нужно сохранять вручную, например добавив специальную роль (enum Qt::ItemDataRole) в модель данных и сохранять в нее состояние, а при загрузке модели восстанавливать состояние отображения


Название: Re: Сохранение состояния элементов...
Отправлено: daenux от Январь 17, 2011, 21:21
Спасибо, я сделал следующем образом:
Прицепился к сигналам раскрытия и сворачивания элементов представления и запоминал ихние индексы в векторном контейнере...

Это так же правильно, или лучше сделать так как вы сказали?


Название: Re: Сохранение состояния элементов...
Отправлено: twp от Январь 18, 2011, 12:01
ну можно и так, но как по мне, то удобнее это хранить прямо в модели, определив для этого свою роль