crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QtreeView и корневой элемент
Sokoloff
  опции профиля:
сообщение 6.4.2009, 17:33
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Разбираюсь сейчас с QAbstractModel и QTreeView.
Смотрю пример "Simple Tree Model Example" http://www.doc.crossplatform.ru/qt/4.5.0/i...emodel-cpp.html.
В конструкторе TreeModel::TreeModel создается корневой элемент, который не отображается в TreeView. И что-то я не пойму это всегда так, надо создавать один скрытый корневой элемент, даже если мне нужно "дерево" а не "куст"?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.4.2009, 17:39
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Sokoloff @ 6.4.2009, 21:33) *
В конструкторе TreeModel::TreeModel создается корневой элемент, который не отображается в TreeView.
а про какой элемент речь, я что-то не понял. Приведи соответсвующий фрагмент кода
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 6.4.2009, 17:44
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Да. Для удобства его можно использовать в качестве заголовка

Небольшая цитата:
Цитата
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.


Сообщение отредактировал Kagami - 6.4.2009, 18:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 6.4.2009, 18:13
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Цитата(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
  опции профиля:
сообщение 6.4.2009, 18:39
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Sokoloff, тут просто такая организация модели, как уже заметил Kagami - для удобства. Корневой элемент используется для заголовков. И это необязательно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 6.4.2009, 19:31
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


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


Тогда я не пойму, что надо поменяьть чтоб корневой элемент начал отображаться.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.4.2009, 19:47
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


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

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

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

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

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

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

Например будет интересно видеть как представление запрашивает данные (строку, столбец и родителя)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 6.4.2009, 19:55
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


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


Если ты хочешь что бы у тебя бы виден один элемент у которого несколько потомков, подчини его корневому.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.4.2009, 20:02
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Kagami, да, это правильное замечание.
Оно полностью соответствует картинке тут Классы моделей
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 7.4.2009, 10:52
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Бр-бр-бр, вы меня запутали:)
Цитата(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. Да или нет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.12.2024, 9:47