Здравствуйте, гость ( Вход | Регистрация )
bobdva | Дата 13.11.2008, 20:20 |
Возникла потребность всё же сделать дерево в таблице, причём модель наследуется от QAbstractItemModel (т.к. приходится делать собственную ленивую загрузку, и данных может быть ооочень много, поэтому грузить их всех - использовать QStandardItemModel не представляется возможным). переопределил index, parent, insertRows, rowCount, columnCount, data, headerData При добавлении элементов вызываю beginInsertRows, endInsertRows. есть элементы вложенные, НО! отображается только один дочерний элемент и нет рядом значков ни + ни - (т.е если у него дети или нет, хотя при построении они есть, и при добавлении index'ы тоже корректно создаются). кто может подсказать где проблема может быть Вопрос снят: почему-то использовал QTableView вместо QTreeView |
|
Гость | Дата 26.7.2008, 14:35 |
То, о чем вы написали, Юрий, я уже знаю Наверное вы правы, я прислушаюсь к вашему совету - использовать уже готовые Qt'шные средства. | |
Litkevich Yuriy | Дата 26.7.2008, 14:14 |
Гость_Гость_*, тыб зарегестрировался, а то к тебе обращатся проблематично. Абстрагирование данных от их представлений реализуется концепцией модель/представление, а реализовать подобную концепцию независимой от библиотеки (Qt, C++ Builder ...) проблематично, лучше сразу определится, например: "Работаю с Qt, и использую их классы" Тогда не нужен допкласс типа BaseTree дело в том что данные в модели QStandardItemModel можно отобразить в трех стандартных представлениях QListView, QTableView и QTreeView
или создать свое собственное представление, например, графическое, с картинками лампочками или как-то еще. |
|
Гость | Дата 26.7.2008, 13:53 |
Litkevich Yuriy: Дело в том, что я написал абстрактный класс дерева с минимальной функциональностью, чтобы потом его можно было использовать в других программах. В том-то все и дело, что меня хочется чтобы данные были максимально обособлены. Сейчас они генерируются псевдослучайным образом. Потом может быть иначе. icore2008: Qt 4.4.0 opensource edition. ЗЫ. Я так понял, что, как и посоветовал Litkevich Yuriy, надо сделать наследника QStandardItem и добавить ему пару нужных мне свойств. Потом, при выборе какого-либо элемента, просто получать по индексу этот элемент и доставать из него дополнительные свойства. Спасибо |
|
icore2008 | Дата 26.7.2008, 11:58 |
Автору темы: интересно, какую версию Qt Вы используете? |
|
Litkevich Yuriy | Дата 26.7.2008, 10:57 |
раз уж ты взялся писать на Qt'ях, то и пользуйся Qt'явыми штучками. Вместо std::string, QString. зачем тебе две модели (SimpleTree и QStandardItemModel) Пользуйся сразу QStandardItemModel, или сделай от нее наследника. Вопрос: откуда берутся данные? |
|
Гость | Дата 26.7.2008, 10:30 |
Правда, остался еще один концептуальный вопрос. Программа разделена на несколько классов - мой абстрактный BaseTree с реализацией основных функций дерева, SimpleTree, приспособленный уже под более конкретную задачу и TreeDataRepresentation, который фактически загоняет информацию из моей структуры данных (из SimpleTree) в QStandardItemModel. В BaseTree каждый элемент дерева может представлять из себя все, что угодно, но у меня для простоты пока каждый содержит имя (name) и значение (value), оба типа std::string. Имена выводятся TreeDataRepresentation'ом в QStandardItemModel и после показываются в QTreeView. Все работает, с этим я разобрался. Как прикрутить сигнал к слоту когда выбирается какой-то элемент, я тоже представляю, но проблема в том, что я не понимаю, как мне достать значение выбранного элемента из BaseTree (а иначе, где их еще хранить?)? Т.е. как связать 2 абстракции? |
|
ЙаМайскЫйПчОЛ | Дата 25.7.2008, 10:19 |
))) Наш человек ))) | |
Гость | Дата 25.7.2008, 10:03 |
Спасибо, утром со свежей головой нашел простое решение, посмотрев мануал на QStandardItemModel. | |
Litkevich Yuriy | Дата 24.7.2008, 21:52 |
Заранее спасибо всем тем, кто тему открыл. тему открыл ты Честно говоря, английские доки курить уже сил нет, запутался русские доки кури здесь а генерировать лучше не в свой класс, а заполнять сразу модель данными, см. пример там использована QStandardItemModel, но пример простой |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 13.1.2025, 22:19 |