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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt 4.2.2]Работа с QTreeView. Expand и select нодов.  (Прочитано 5913 раз)
Tamara
Гость
« : Февраль 28, 2007, 09:20 »

Есть дерево, в которое можно добавлять ноды, открываю несколько нодов, что-то выделяю... Добавляю в дерево новый элемент, после чего делаю reset()  (beginInsertRow и т.п - это в этом плане то же самое).
Естественно дерево возвращается в изначальное положение (все ноды закрываются и т.п.).
Я хочу как-нибудь сохранить ссылки на индексы открытых (выделенных) элементов, чтоб потом их переоткрыть (выделить). Но с ними творится что-то странное (становятся не валидными еще за долго до ресета, не могу понять в какой конктретный момент)...

Как вообще сохранить состояние дерева? Может я не так использую beginInsert/endInsert и с их помощью все делается само?
И вообще почему могут индексы невалидными становиться?
Поделитесь хоть каким-нибудь опытом на этот счет, пожалуйста... Ну или где это написано может быть....    :?
Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #1 : Февраль 28, 2007, 10:16 »

Просто...
Кажется я начинаю понимать Qt && Assistant Улыбающийся

Вот пример на QTableView && QSqlQueryModel

Код:

Header:

QItemSelectionModel *driverselection;


Код:

Cpp:

void DriversForm::LoadDrivers(){
.......
.......
driversmodel=new QSqlQueryModel(this);
tableView->setModel(driversmodel);
[b]driverselection=tableView->selectionModel();
connect(driverselection, SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(SetDriverIndex(const QModelIndex &)));
[/b]
}



void DriversForm::EditDriver(const QModelIndex &index){
driverindex=index;

[b]QItemSelection temp=driverselection->selection();[/b]
DriverCardForm *dlg=new DriverCardForm(true, [b]driversmodel->data(driversmodel->index(index.row(), 3), 0).toInt(), this);[/b]
dlg->exec();

LoadDrivers();

[b]driverselection->select(temp, QItemSelectionModel::Select);
[/b]
delete dlg;

//first we load the drivers, second deleted Dialog (visual speed)
}
Записан
Lion
Гость
« Ответ #2 : Февраль 28, 2007, 10:21 »

QModelIndex нельзя сохранять, в этом случае надо использовать QPersistentModelIndex.
Записан
Tamara
Гость
« Ответ #3 : Февраль 28, 2007, 14:04 »

Цитата: "Lion"
QModelIndex нельзя сохранять, в этом случае надо использовать QPersistentModelIndex.


Ва! Здорово!:)
Действительно теперь они сохраняются! Только теперь после ресета модели хлопаются... Грустный В смысле невалидными становятся. Это, конечно, логично, но может это можно как-то обойти?

добавлено спустя 3 часа 7 минут:

 
Цитата: "Sergey B."
Просто...
Кажется я начинаю понимать Qt && Assistant Улыбающийся

Вот пример на QTableView && QSqlQueryModel

Код:

Header:
...


Что-то мне никак не удается в полной мере огрокать смысл этого поста в отношении заданных мною вопросов... Можно небольшое пояснение для тех, кто в танке?Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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