crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QAbstarctItemModel + QTreeView, Как заполнить модель своими данными и прикрутить к представлению?
Гость_Гость_*
сообщение 24.7.2008, 21:32
Сообщение #1





Гости








    


Заранее спасибо всем тем, кто тему открыл.

Честно говоря, английские доки курить уже сил нет, запутался :)

Вопрос вот в чем: мне нужно отобразить несложное дерево. Изначально оно генерируется и хранится в написанном мною классе SimpeTree.
Каждый элемент имеет указатель на первого потомка и на соседа (брата) - nextSibling. Алгоритм обхода, заполнение данными, все реализовано.

Всю эту бодягу надо прикрутить к QAbstractItemModel и показать в QTreeView. Подскажите, пожалуйста, с чего начать и как все это сделать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 9)
Litkevich Yuriy
  опции профиля:
сообщение 24.7.2008, 21:52
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Гость_Гость_* @ 25.7.2008, 1:33) *
Заранее спасибо всем тем, кто тему открыл.

тему открыл ты

Цитата(Гость_Гость_* @ 25.7.2008, 1:33) *
Честно говоря, английские доки курить уже сил нет, запутался

русские доки кури здесь

а генерировать лучше не в свой класс, а заполнять сразу модель данными, см. пример
там использована QStandardItemModel, но пример простой
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 25.7.2008, 10:03
Сообщение #3





Гости








    


Спасибо, утром со свежей головой нашел простое решение, посмотрев мануал на QStandardItemModel.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ЙаМайскЫйПчОЛ
  опции профиля:
сообщение 25.7.2008, 10:19
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 154
Регистрация: 10.7.2008
Из: СПб
Пользователь №: 232

Спасибо сказали: 7 раз(а)




Репутация:   5  


))) Наш человек )))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 26.7.2008, 10:30
Сообщение #5





Гости








    


Правда, остался еще один концептуальный вопрос.

Программа разделена на несколько классов - мой абстрактный BaseTree с реализацией основных функций дерева, SimpleTree, приспособленный уже под более конкретную задачу и TreeDataRepresentation, который фактически загоняет информацию из моей структуры данных (из SimpleTree) в QStandardItemModel.

В BaseTree каждый элемент дерева может представлять из себя все, что угодно, но у меня для простоты пока каждый содержит имя (name) и значение (value), оба типа std::string. Имена выводятся TreeDataRepresentation'ом в QStandardItemModel и после показываются в QTreeView. Все работает, с этим я разобрался.

Как прикрутить сигнал к слоту когда выбирается какой-то элемент, я тоже представляю, но проблема в том, что я не понимаю, как мне достать значение выбранного элемента из BaseTree (а иначе, где их еще хранить?)? Т.е. как связать 2 абстракции?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.7.2008, 10:57
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


раз уж ты взялся писать на Qt'ях, то и пользуйся Qt'явыми штучками. Вместо std::string, QString. зачем тебе две модели (SimpleTree и QStandardItemModel) Пользуйся сразу QStandardItemModel, или сделай от нее наследника.

Вопрос: откуда берутся данные?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
icore2008
  опции профиля:
сообщение 26.7.2008, 11:58
Сообщение #7


Студент
*

Группа: Новичок
Сообщений: 22
Регистрация: 10.4.2008
Пользователь №: 145

Спасибо сказали: 0 раз(а)




Репутация:   0  


Автору темы:
интересно, какую версию Qt Вы используете?

Сообщение отредактировал icore2008 - 26.7.2008, 11:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 26.7.2008, 13:53
Сообщение #8





Гости








    


Litkevich Yuriy:

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

В том-то все и дело, что меня хочется чтобы данные были максимально обособлены. Сейчас они генерируются псевдослучайным образом. Потом может быть иначе.

icore2008:
Qt 4.4.0 opensource edition.

ЗЫ. Я так понял, что, как и посоветовал Litkevich Yuriy, надо сделать наследника QStandardItem и добавить ему пару нужных мне свойств. Потом, при выборе какого-либо элемента, просто получать по индексу этот элемент и доставать из него дополнительные свойства.

Спасибо :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.7.2008, 14:14
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Гость_Гость_*, тыб зарегестрировался, а то к тебе обращатся проблематично.
Абстрагирование данных от их представлений реализуется концепцией модель/представление, а реализовать подобную концепцию независимой от библиотеки (Qt, C++ Builder ...) проблематично, лучше сразу определится, например: "Работаю с Qt, и использую их классы"
Тогда не нужен допкласс типа BaseTree
дело в том что данные в модели QStandardItemModel можно отобразить в трех стандартных представлениях QListView, QTableView и QTreeView
...
QStandardItemModel    *model = new QStandardItemModel;
...
QListView    *list = new QListView;
QTableView    *table = new QTableView;
QTreeView    *tree = new QTreeView;
...
list->setModel(model);
table->setModel(model);
tree->setModel(model);


или создать свое собственное представление, например, графическое, с картинками лампочками или как-то еще.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 26.7.2008, 14:35
Сообщение #10





Гости








    


То, о чем вы написали, Юрий, я уже знаю :) Наверное вы правы, я прислушаюсь к вашему совету - использовать уже готовые Qt'шные средства.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 6:15