Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QtreeView и корневой элемент
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Sokoloff
Разбираюсь сейчас с QAbstractModel и QTreeView.
Смотрю пример "Simple Tree Model Example" http://www.doc.crossplatform.ru/qt/4.5.0/i...emodel-cpp.html.
В конструкторе TreeModel::TreeModel создается корневой элемент, который не отображается в TreeView. И что-то я не пойму это всегда так, надо создавать один скрытый корневой элемент, даже если мне нужно "дерево" а не "куст"?
Litkevich Yuriy
Цитата(Sokoloff @ 6.4.2009, 21:33) *
В конструкторе TreeModel::TreeModel создается корневой элемент, который не отображается в TreeView.
а про какой элемент речь, я что-то не понял. Приведи соответсвующий фрагмент кода
Kagami
Да. Для удобства его можно использовать в качестве заголовка

Небольшая цитата:
Цитата
It is up to the constructor to create a root item for the model. This item only contains vertical header data for convenience. We also use it to reference the internal data structure that contains the model data, and it is used to represent an imaginary parent of top-level items in the model.
Sokoloff
Цитата(Litkevich Yuriy @ 6.4.2009, 18:39) *
Цитата(Sokoloff @ 6.4.2009, 21:33) *
В конструкторе TreeModel::TreeModel создается корневой элемент, который не отображается в TreeView.
а про какой элемент речь, я что-то не понял. Приведи соответсвующий фрагмент кода


rootItem из
TreeModel::TreeModel(const QString &data, QObject *parent)
     : QAbstractItemModel(parent)
{
     QList<QVariant> rootData;
     rootData << "Title" << "Summary";
     rootItem = new TreeItem(rootData);
     setupModelData(data.split(QString("\n")), rootItem);
}
Litkevich Yuriy
Sokoloff, тут просто такая организация модели, как уже заметил Kagami - для удобства. Корневой элемент используется для заголовков. И это необязательно.
Sokoloff
Цитата(Litkevich Yuriy @ 6.4.2009, 19:39) *
Sokoloff, тут просто такая организация модели, как уже заметил Kagami - для удобства. Корневой элемент используется для заголовков. И это необязательно.


Тогда я не пойму, что надо поменяьть чтоб корневой элемент начал отображаться.
Litkevich Yuriy
Цитата(Sokoloff @ 6.4.2009, 23:31) *
Тогда я не пойму, что надо поменяьть чтоб корневой элемент начал отображаться.
чтобы ты что-то видел в представлении, очевидно, что это "что-то" должно быть получено представлением.

В дереве за это отвечают несколько функций:
data()
Цитата
Если наша модель иерархическая, мы также должны реализовать функции index() и parent().
тык

подробности смотри в Создание собственных моделей

Sokoloff, могу тебе порекомендовать такую штуку (когда я делал первую свою табличную модель я ею воспользовался)

Воткни в каждую функцию модели (из примера) подобную строчку:
qDebug() << "Model::function_name";
где: function_name - имя конкретной функции.
и "вошкай" дерево, в консоли увидешь очень много интересного!

затем доработай по своему усмотрению.

Например будет интересно видеть как представление запрашивает данные (строку, столбец и родителя)
Kagami
Наверно цитату невнимательно читали. Поэтому я ее переведу:
Цитата
Конструктор должен создать корневой элемент модели. Для удобства этот элемент содержит только данные вертикального заголовка. Мы так же используем его для ссылки на внутренюю структуру данных содержащую данные модель и он используется для представления воображаемого родителя элементов верхнего уровня в модели


Если ты хочешь что бы у тебя бы виден один элемент у которого несколько потомков, подчини его корневому.
Litkevich Yuriy
Kagami, да, это правильное замечание.
Оно полностью соответствует картинке тут Классы моделей
Sokoloff
Бр-бр-бр, вы меня запутали:)
Цитата(Kagami @ 6.4.2009, 18:44) *
Да. Для удобства его можно использовать в качестве заголовка
Я понял как "Да - всегда нужно создовать один невидимый над-корневой элемент."

Цитата(Litkevich Yuriy @ 6.4.2009, 19:39) *
Sokoloff, тут просто такая организация модели, как уже заметил Kagami - для удобства. Корневой элемент используется для заголовков. И это необязательно.
Мне понимается как "В данном случае у них такая организация, и они создали над-корневой элемент, но это не обязательно, и ты можешь его не создавать". Т.е. это противоречит Kagami.


Цитата(Kagami @ 6.4.2009, 20:55) *
Если ты хочешь что бы у тебя бы виден один элемент у которого несколько потомков, подчини его корневому.
Опять же, "Да всегда надо создовать над-корневой элемент."


Цитата(Litkevich Yuriy @ 6.4.2009, 21:02) *
Kagami, да, это правильное замечание.
Опа! Теперь Yuriy соглашается с Kagami.


Таким образом, чтоб заморить червя сомненья переспрошу еще раз.
Верно ли данное утверждение?
При создании модели всегда необходимо создать "лишний" элемент, который не будет отображен в TreeView. Да или нет?
Litkevich Yuriy
Цитата(Sokoloff @ 7.4.2009, 14:52) *
При создании модели всегда необходимо создать "лишний" элемент, который не будет отображен в TreeView. Да
к нему-то и буду цеплятся все остальные
Kagami
Да
Rocky
А почему нельзя создать как бы список корневых элементов, а заголовки колонок возвращать через headerData? Правда если его убрать, то неясно как будет выглядеть ф-ии index/parent...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.