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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeView + QDirModel как организовать несколько узлов родителей?  (Прочитано 6086 раз)
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? И как это сделать?
Пожалуйста,помогите! Я прикрепила картинку,вот что именно мне нужно.
Записан
KADABRA
Гость
« Ответ #1 : Ноябрь 02, 2010, 22:28 »

Цитировать
Возможно ли реализовать подобную структуру,примерно как в QT? И как это сделать?
Да, надо реализовать свою модель.
Записан
virtual_root
Гость
« Ответ #2 : Ноябрь 03, 2010, 08:50 »

А как это сделать? С чего мне начать?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Ноябрь 03, 2010, 10:31 »

1. Запускаешь Ассистент.
2. Читаешь про QAbstractItemModel.
3. Непонимающий
4. Профит.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
virtual_root
Гость
« Ответ #4 : Ноябрь 03, 2010, 11:33 »

Подскажите,пожалуйста, а как мне добавить к родителю ещё потомков,в уже имеющейся модели?
Возможно ли,в качестве потомка добавлять ещё одну модель?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Ноябрь 03, 2010, 11:34 »

bool QAbstractItemModel::insertRow ( int row, const QModelIndex & parent = QModelIndex() )
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
virtual_root
Гость
« Ответ #6 : Ноябрь 03, 2010, 11:36 »

Если несложно,можно пример кода. Я просто только недавно работаю с QT, и до меня туго доходит что мне нужно сделать в с моим деревом,чтоб оно было примерно как на картинке.
Записан
virtual_root
Гость
« Ответ #7 : Ноябрь 03, 2010, 11:38 »

А как мне узнать индекс родителя? Я же уже добавила в дерево модель, мне теперь получается нужно в самый верхний уровень добавить ещё одну подмодель....


P.S. Я совсем никак не могу разобраться с этими моделями, документацию читала,но тяжело что-то соотнести что за чем следовать должно.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Ноябрь 03, 2010, 12:18 »

Ты не добавляешь в дерево модель - дерево и есть твоя модель.
Посмотри пример examples\itemviews\simpletreemodel\ в каталоге с Кьютом.
Что будет не понятно, спрашивай.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
galilley
Гость
« Ответ #9 : Ноябрь 05, 2010, 08:22 »

Доброго времени!
Скажу на своём примере, что я хоть и пишу на Qt уже довольно продолжительное время,  но до сих пор слова "создать свою модель" приводят меня в лёгкое состояние ужаса. Я, конечно, понимаю, что там наверно и нет ничего страшного, а если её написать (модель), то дальнейшая работа значительно упроститься а код станет гораздо красивее. Но, поскольку разобраться руки не доходят, а писать структуры, подобные вашим, необходимость есть, я послупаю следующим образом - пишу все через QStandardModel. Тут сруктура получается следующая - добавление item-ов с наследником от invisibleRootItem, это первый уровень. Потом, добавление к этим item-ам строчек и колонок, и назначение item-ов им, это второй уровень и т.д. Как временное решение, меня это устраивает.
Но повторяю, это совет из рода "как не надо делать".
Записан
virtual_root
Гость
« Ответ #10 : Ноябрь 05, 2010, 19:52 »

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

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


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