QAbstarctItemModel + QTreeView, Как заполнить модель своими данными и прикрутить к представлению? |
Здравствуйте, гость ( Вход | Регистрация )
QAbstarctItemModel + QTreeView, Как заполнить модель своими данными и прикрутить к представлению? |
Гость_Гость_* |
24.7.2008, 21:32
Сообщение
#1
|
Гости |
Заранее спасибо всем тем, кто тему открыл.
Честно говоря, английские доки курить уже сил нет, запутался Вопрос вот в чем: мне нужно отобразить несложное дерево. Изначально оно генерируется и хранится в написанном мною классе SimpeTree. Каждый элемент имеет указатель на первого потомка и на соседа (брата) - nextSibling. Алгоритм обхода, заполнение данными, все реализовано. Всю эту бодягу надо прикрутить к QAbstractItemModel и показать в QTreeView. Подскажите, пожалуйста, с чего начать и как все это сделать. |
|
|
Litkevich Yuriy |
24.7.2008, 21:52
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Гость_Гость_* |
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
или создать свое собственное представление, например, графическое, с картинками лампочками или как-то еще. |
|
|
Гость_Гость_* |
26.7.2008, 14:35
Сообщение
#10
|
Гости |
То, о чем вы написали, Юрий, я уже знаю Наверное вы правы, я прислушаюсь к вашему совету - использовать уже готовые Qt'шные средства.
|
|
|
Текстовая версия | Сейчас: 11.12.2024, 11:53 |