Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: virtual_root от Ноябрь 02, 2010, 22:06



Название: QTreeView + QDirModel как организовать несколько узлов родителей?
Отправлено: virtual_root от Ноябрь 02, 2010, 22:06
У меня возникла следующая проблема: необходимо по кнопке открывать открывать диалоговое окно и выбирать интересующую нас папку. Затем всё её содержимое добавлять в QTreeView. С этим проблем не возникло. А вот как снова при выборе по кнопки новой директории, добавлять её в QTreeView, как новый узел.
Я использовала следующий код:
  void MainWindow::on_pushButton_3_clicked()
{
   QFileDialog d;
   QDirModel *my_model;
   QString dir_name = d.getExistingDirectory();
   my_model = new QDirModel;
   ui->treeView->setModel(my_model);
   ui->treeView->setRootIndex(my_model->index(dir_name));
}

Вся проблема в том,что при каждом нажатии у меня всё заново перерисовывается в QTreeView.
Возможно ли реализовать подобную структуру,примерно как в QT? И как это сделать?
Пожалуйста,помогите! Я прикрепила картинку,вот что именно мне нужно.


Название: Re: QTreeView + QDirModel как организовать несколько узлов родителей?
Отправлено: KADABRA от Ноябрь 02, 2010, 22:28
Цитировать
Возможно ли реализовать подобную структуру,примерно как в QT? И как это сделать?
Да, надо реализовать свою модель.


Название: Re: QTreeView + QDirModel как организовать несколько узлов родителей?
Отправлено: virtual_root от Ноябрь 03, 2010, 08:50
А как это сделать? С чего мне начать?


Название: Re: QTreeView + QDirModel как организовать несколько узлов родителей?
Отправлено: Пантер от Ноябрь 03, 2010, 10:31
1. Запускаешь Ассистент.
2. Читаешь про QAbstractItemModel.
3. ???
4. Профит.


Название: Re: QTreeView + QDirModel как организовать несколько узлов родителей?
Отправлено: virtual_root от Ноябрь 03, 2010, 11:33
Подскажите,пожалуйста, а как мне добавить к родителю ещё потомков,в уже имеющейся модели?
Возможно ли,в качестве потомка добавлять ещё одну модель?


Название: Re: QTreeView + QDirModel как организовать несколько узлов родителей?
Отправлено: Пантер от Ноябрь 03, 2010, 11:34
bool QAbstractItemModel::insertRow ( int row, const QModelIndex & parent = QModelIndex() )


Название: Re: QTreeView + QDirModel как организовать несколько узлов родителей?
Отправлено: virtual_root от Ноябрь 03, 2010, 11:36
Если несложно,можно пример кода. Я просто только недавно работаю с QT, и до меня туго доходит что мне нужно сделать в с моим деревом,чтоб оно было примерно как на картинке.


Название: Re: QTreeView + QDirModel как организовать несколько узлов родителей?
Отправлено: virtual_root от Ноябрь 03, 2010, 11:38
А как мне узнать индекс родителя? Я же уже добавила в дерево модель, мне теперь получается нужно в самый верхний уровень добавить ещё одну подмодель....


P.S. Я совсем никак не могу разобраться с этими моделями, документацию читала,но тяжело что-то соотнести что за чем следовать должно.


Название: Re: QTreeView + QDirModel как организовать несколько узлов родителей?
Отправлено: Пантер от Ноябрь 03, 2010, 12:18
Ты не добавляешь в дерево модель - дерево и есть твоя модель.
Посмотри пример examples\itemviews\simpletreemodel\ в каталоге с Кьютом.
Что будет не понятно, спрашивай.


Название: Re: QTreeView + QDirModel как организовать несколько узлов родителей?
Отправлено: galilley от Ноябрь 05, 2010, 08:22
Доброго времени!
Скажу на своём примере, что я хоть и пишу на Qt уже довольно продолжительное время,  но до сих пор слова "создать свою модель" приводят меня в лёгкое состояние ужаса. Я, конечно, понимаю, что там наверно и нет ничего страшного, а если её написать (модель), то дальнейшая работа значительно упроститься а код станет гораздо красивее. Но, поскольку разобраться руки не доходят, а писать структуры, подобные вашим, необходимость есть, я послупаю следующим образом - пишу все через QStandardModel. Тут сруктура получается следующая - добавление item-ов с наследником от invisibleRootItem, это первый уровень. Потом, добавление к этим item-ам строчек и колонок, и назначение item-ов им, это второй уровень и т.д. Как временное решение, меня это устраивает.
Но повторяю, это совет из рода "как не надо делать".


Название: Re: QTreeView + QDirModel как организовать несколько узлов родителей?
Отправлено: virtual_root от Ноябрь 05, 2010, 19:52
спасибо вам большое за совет. Правда у меня ничего не вышло. Я вообще в принципе не могут заставить QTreeView отображать мою модель,ничего не получается...(
Может есть какой-то вообще другой способ решения моей проблемы? Я думала может просто пусть отображается как у меня и есть(выше в коде), а пользователь сам выделит нужные папки,нажмет на кнопку и только они останутся в QTreeView. Но у меня и это не получается, я не могу никак связвть QDirModel с QProxyModel(думала мне она нужна для этих целей).

Мистр galiley, если вы сталкивались с подобной проблемой у вас не осталось примера кода? Если вам не трудно покажите,пожалуйста,как это реализовать.