crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 13.7.2025, 6:00