crossplatform.ru

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


  Ответ в QAbstarctItemModel + QTreeView
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
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
...
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, 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
 
Цитата(Гость_Гость_* @ 25.7.2008, 1:33) *
Заранее спасибо всем тем, кто тему открыл.

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

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

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

а генерировать лучше не в свой класс, а заполнять сразу модель данными, см. пример
там использована QStandardItemModel, но пример простой
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 13.1.2025, 22:26