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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Объясните суть модели  (Прочитано 8331 раз)
CJ1
Гость
« : Октябрь 19, 2012, 07:51 »

Всем здорова
Мне нужно понять суть модели.
Вот например с QTreeView
Как вобще ей пользоваться?
Как сделать дерево свое?
Записан
Vass
Гость
« Ответ #1 : Октябрь 19, 2012, 08:04 »

QTreeView - это не модель, это это view, т.е. виджет для отображения данных, а модель - это средство хранения и манипулирования данными.

Начните с изучения класса QAbstractItemModel - посмотрите какие pure virtual методы придется определить, чтобы создать своего наследника,
очень полезно для понимания что происходит, полистать чужой код с кастомными моделями.

Если дерево свое которое вам нужно достаточно простое и не содержит никаких специфических данных,
возможно подойдет QTreeWidget в котором уже установлена стандартная модель.
Записан
Bepec
Гость
« Ответ #2 : Октябрь 19, 2012, 08:20 »

Маленький курс для начинающих.

Q*View(Table;List;Tree) - это виджеты для отображения информации. Скажем так - экраны(дисплеи).

Модель - это класс, хранящий информацию и отдающий её по требованию View.

Для чего это сделано? Чтобы можно было быстро менять/переносить/фильтровать/отображать/сортировать информацию, не затрагивая отображение.

Есть маленькие различия между моделями для разных View:

1) ListView - данные для него это список.
2) TableView - данные для него это матрица(строки и столбцы).
3) TreeView - данные для него построены на принципе родитель/наследник.

У каждой модели есть функции, которые необходимо переопределить при наследовании. Более глубоко распространяться не буду - это тема для оччень большого манула Улыбающийся

PS если тебе нужно дерево, попробуй QTreeWidget.

Разница между Q*View и Q*Widget в том, что у Widget уже имеется модель нужного типа и добавлены интерфейсы для использования.
Записан
CJ1
Гость
« Ответ #3 : Октябрь 19, 2012, 08:26 »

Спасибо, но мне нужно именно самому сделать из QtreeView дерево
Какую модель надо использовать?
QStandardItemModel?
Записан
mutineer
Гость
« Ответ #4 : Октябрь 19, 2012, 08:30 »

Посмотри в документацию - там есть пример реализации древовидной модели
Записан
Bepec
Гость
« Ответ #5 : Октябрь 19, 2012, 09:01 »

Открываем примеры Qt->ItemView->SimpleTreeModel.

В принципе уже готовая TreeModel, как раз для ознакомления и создания на её основе своей модели.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Октябрь 19, 2012, 11:21 »

Программирование модель/представление.
Записан

Qt 5.11/4.8.7 (X11/Win)
CJ1
Гость
« Ответ #7 : Октябрь 19, 2012, 11:52 »

Ладно!
Бросил я пока то дело, а вот с QtreeWidget хотябы помогите
Код
C++ (Qt)
   QTreeWidgetItem *topLevelItem=new QTreeWidgetItem();
   topLevelItem->setText(0,"Главное");
 
   QTreeWidgetItem *item=new QTreeWidgetItem(topLevelItem);
   item->setText(0,"Второстепенное");
 
   QTreeWidgetItem *item2=new QTreeWidgetItem(item);
   item2->setText(0,"Третестепенное");
 
 
   ui->treeWidget->addTopLevelItem(topLevelItem);
   QTreeWidgetItem * pl = new QTreeWidgetItem();
 
 
 


Как уровни то делают, вот так делаю нифига не вфходит


Надо так

Главное
|
|---Второстепенное
      |
      |---Третестепенное


О, все
« Последнее редактирование: Октябрь 19, 2012, 11:56 от CJ1 » Записан
CJ1
Гость
« Ответ #8 : Октябрь 19, 2012, 12:17 »

А как можно сделать чтоб при нажатии на кнопку дерево открылось или закрылось.
И сохранидо свое состояние при закрытии?
Записан
mutineer
Гость
« Ответ #9 : Октябрь 19, 2012, 12:19 »

Что значит "дерево закрылось"? на какую кнопку? какое состояние сохранило?
Записан
CJ1
Гость
« Ответ #10 : Октябрь 19, 2012, 12:29 »

Открытое и закрытое дерево!


Я вышел из программы, вошел и все также!
Записан
mutineer
Гость
« Ответ #11 : Октябрь 19, 2012, 12:34 »

Развернуть/свернуть ветку:
void QTreeWidget::collapseItem ( const QTreeWidgetItem * item ) [slot]
void QTreeWidget::expandItem ( const QTreeWidgetItem * item ) [slot]

Сохранение состояния между запусками проги надо делать самому
Записан
CJ1
Гость
« Ответ #12 : Октябрь 19, 2012, 14:19 »

Сделал!
А можно програмно получить последний и первый QtreeWidgetItem?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #13 : Октябрь 19, 2012, 14:41 »

можно, если уделить немного времени чтению документации
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
trot
Гость
« Ответ #14 : Октябрь 19, 2012, 16:46 »

Цитировать
А можно програмно получить последний и первый QtreeWidgetItem?
Необходимо учитывать, что в дереве понятия последний/первый можно использовать только в рамках одного узла.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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