Russian Qt Forum

Qt => Вопросы новичков => Тема начата: CJ1 от Октябрь 19, 2012, 07:51



Название: Объясните суть модели
Отправлено: CJ1 от Октябрь 19, 2012, 07:51
Всем здорова
Мне нужно понять суть модели.
Вот например с QTreeView
Как вобще ей пользоваться?
Как сделать дерево свое?


Название: Re: Объясните суть модели
Отправлено: Vass от Октябрь 19, 2012, 08:04
QTreeView - это не модель, это это view, т.е. виджет для отображения данных, а модель - это средство хранения и манипулирования данными.

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

Если дерево свое которое вам нужно достаточно простое и не содержит никаких специфических данных,
возможно подойдет QTreeWidget в котором уже установлена стандартная модель.


Название: Re: Объясните суть модели
Отправлено: Bepec от Октябрь 19, 2012, 08:20
Маленький курс для начинающих.

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

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

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

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

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

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

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

Разница между Q*View и Q*Widget в том, что у Widget уже имеется модель нужного типа и добавлены интерфейсы для использования.


Название: Re: Объясните суть модели
Отправлено: CJ1 от Октябрь 19, 2012, 08:26
Спасибо, но мне нужно именно самому сделать из QtreeView дерево
Какую модель надо использовать?
QStandardItemModel?


Название: Re: Объясните суть модели
Отправлено: mutineer от Октябрь 19, 2012, 08:30
Посмотри в документацию - там есть пример реализации древовидной модели


Название: Re: Объясните суть модели
Отправлено: Bepec от Октябрь 19, 2012, 09:01
Открываем примеры Qt->ItemView->SimpleTreeModel.

В принципе уже готовая TreeModel, как раз для ознакомления и создания на её основе своей модели.


Название: Re: Объясните суть модели
Отправлено: GreatSnake от Октябрь 19, 2012, 11:21
Программирование модель/представление (http://www.doc.crossplatform.ru/qt/4.7.x/html-qt/model-view-programming.html).


Название: Re: Объясните суть модели
Отправлено: CJ1 от Октябрь 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();
 
 
 


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


Надо так

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


О, все


Название: Re: Объясните суть модели
Отправлено: CJ1 от Октябрь 19, 2012, 12:17
А как можно сделать чтоб при нажатии на кнопку дерево открылось или закрылось.
И сохранидо свое состояние при закрытии?


Название: Re: Объясните суть модели
Отправлено: mutineer от Октябрь 19, 2012, 12:19
Что значит "дерево закрылось"? на какую кнопку? какое состояние сохранило?


Название: Re: Объясните суть модели
Отправлено: CJ1 от Октябрь 19, 2012, 12:29
Открытое и закрытое дерево!


Я вышел из программы, вошел и все также!


Название: Re: Объясните суть модели
Отправлено: mutineer от Октябрь 19, 2012, 12:34
Развернуть/свернуть ветку:
void QTreeWidget::collapseItem ( const QTreeWidgetItem * item ) [slot]
void QTreeWidget::expandItem ( const QTreeWidgetItem * item ) [slot]

Сохранение состояния между запусками проги надо делать самому


Название: Re: Объясните суть модели
Отправлено: CJ1 от Октябрь 19, 2012, 14:19
Сделал!
А можно програмно получить последний и первый QtreeWidgetItem?


Название: Re: Объясните суть модели
Отправлено: kambala от Октябрь 19, 2012, 14:41
можно, если уделить немного времени чтению документации


Название: Re: Объясните суть модели
Отправлено: trot от Октябрь 19, 2012, 16:46
Цитировать
А можно програмно получить последний и первый QtreeWidgetItem?
Необходимо учитывать, что в дереве понятия последний/первый можно использовать только в рамках одного узла.