Russian Qt Forum

Qt => Общие вопросы => Тема начата: Tamara от Февраль 28, 2007, 09:20



Название: [Qt 4.2.2]Работа с QTreeView. Expand и select нодов.
Отправлено: Tamara от Февраль 28, 2007, 09:20
Есть дерево, в которое можно добавлять ноды, открываю несколько нодов, что-то выделяю... Добавляю в дерево новый элемент, после чего делаю reset()  (beginInsertRow и т.п - это в этом плане то же самое).
Естественно дерево возвращается в изначальное положение (все ноды закрываются и т.п.).
Я хочу как-нибудь сохранить ссылки на индексы открытых (выделенных) элементов, чтоб потом их переоткрыть (выделить). Но с ними творится что-то странное (становятся не валидными еще за долго до ресета, не могу понять в какой конктретный момент)...

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


Название: [Qt 4.2.2]Работа с QTreeView. Expand и select нодов.
Отправлено: Sergey B. от Февраль 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)
}


Название: [Qt 4.2.2]Работа с QTreeView. Expand и select нодов.
Отправлено: Lion от Февраль 28, 2007, 10:21
QModelIndex нельзя сохранять, в этом случае надо использовать QPersistentModelIndex.


Название: [Qt 4.2.2]Работа с QTreeView. Expand и select нодов.
Отправлено: Tamara от Февраль 28, 2007, 14:04
Цитата: "Lion"
QModelIndex нельзя сохранять, в этом случае надо использовать QPersistentModelIndex.


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

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

 
Цитата: "Sergey B."
Просто...
Кажется я начинаю понимать Qt && Assistant :)

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

Код:

Header:
...


Что-то мне никак не удается в полной мере огрокать смысл этого поста в отношении заданных мною вопросов... Можно небольшое пояснение для тех, кто в танке?;)