Russian Qt Forum
Ноябрь 25, 2024, 13:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сохранение состояния элементов...  (Прочитано 3105 раз)
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);
//Воаля, ничего не происходит, хотя по логике должны были отобразиться раскрытые и выделенные элементы предыдущего режима (сейсии можно сказать)

Прошу помощи, друзья! Улыбающийся
Записан
twp
Гость
« Ответ #1 : Январь 17, 2011, 14:26 »

дело в том что модель не хранит данные об раскрытых элементов. Эту информацию нужно сохранять вручную, например добавив специальную роль (enum Qt::ItemDataRole) в модель данных и сохранять в нее состояние, а при загрузке модели восстанавливать состояние отображения
Записан
daenux
Гость
« Ответ #2 : Январь 17, 2011, 21:21 »

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

Это так же правильно, или лучше сделать так как вы сказали?
Записан
twp
Гость
« Ответ #3 : Январь 18, 2011, 12:01 »

ну можно и так, но как по мне, то удобнее это хранить прямо в модели, определив для этого свою роль
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.04 секунд. Запросов: 21.