Russian Qt Forum

Qt => Model-View (MV) => Тема начата: aljeshishe от Декабрь 03, 2009, 19:29



Название: Как сделать заголовки различными на каждом уровне в модели ?
Отправлено: aljeshishe от Декабрь 03, 2009, 19:29
Есть древовидная модель: список пользователей, каждый пользователь содержит список папок, каждая папка содержит список сообщений. Естественно у каждого уровня данных различный набор полей:
у пользователей и папок - 2, у сообщений ~10, не совпадающих по смыслу. Например количество содержащихся элементов есть у пользователя и у папки но нет у сообщения.
Модель отображается в двух QTreeView, по типу The Bat (слева пользователи/папки, справа сообщения)
Столкнулся с тем что QAbstractItemModel::headerData должен возвращать одинаковый заголовок независимо от уровня в модели. Подскажите как сделать так, что бы в деревьях правильно отображались заголовки: в левом  - имя, количество, в правом - тема, дата, отправитель, получатель и т.д.



Название: Re: Как сделать заголовки различными на каждом уровне в модели ?
Отправлено: lit-uriy от Декабрь 03, 2009, 19:38
снимок бы этого Bat'а, а то я не понял как выглядеть должно


Название: Re: Как сделать заголовки различными на каждом уровне в модели ?
Отправлено: aljeshishe от Декабрь 03, 2009, 19:46
The bat


Название: Re: Как сделать заголовки различными на каждом уровне в модели ?
Отправлено: spectre71 от Декабрь 03, 2009, 20:01
Есть древовидная модель: список пользователей, каждый пользователь содержит список папок, каждая папка содержит список сообщений. Естественно у каждого уровня данных различный набор полей:
у пользователей и папок - 2, у сообщений ~10, не совпадающих по смыслу. Например количество содержащихся элементов есть у пользователя и у папки но нет у сообщения.
Модель отображается в двух QTreeView, по типу The Bat (слева пользователи/папки, справа сообщения)
Столкнулся с тем что QAbstractItemModel::headerData должен возвращать одинаковый заголовок независимо от уровня в модели. Подскажите как сделать так, что бы в деревьях правильно отображались заголовки: в левом  - имя, количество, в правом - тема, дата, отправитель, получатель и т.д.

Еще вопросик назрел, по описанной модели, точнее по представлению, поэтому отдельную тему решил не создавать. В левом дереве должны отображаться пользователи/папки, но не должны отображаться сообщения. Как это реализовать. Думал в сторону QSortFilterProxyModel и его  filterAcceptsRow. Еще была идея наследования от QTreeView, с последующей заменой виртуальных функций (правда не разобрался каких конкретно). В результате пока остановился на более простом  expandToDepth (0) и установке setItemsExpandable ( false) (правда в этом случае у папок остаются плюсики сбоку). Посоветуйте что лучше.

Не обязательно для обоих View должна быть одна модель!
Источник данных у тебя один, но моделей может быть и больше.


Название: Re: Как сделать заголовки различными на каждом уровне в модели ?
Отправлено: lit-uriy от Декабрь 03, 2009, 20:10
>>Еще вопросик ... точнее по представлению, поэтому отдельную тему решил не создавать.
А лучше создать, т.к. ищущему ответ на свой вопрос неудобно его выковыривать из темы-каши.


Название: Re: Как сделать заголовки различными на каждом уровне в модели ?
Отправлено: spectre71 от Декабрь 03, 2009, 20:13
>>Еще вопросик ... точнее по представлению, поэтому отдельную тему решил не создавать.
А лучше создать, т.к. ищущему ответ на свой вопрос неудобно его выковыривать из темы-каши.

Угу. :)
Но в данном случае 2 модели решают обе проблемы.


Название: Re: Как сделать заголовки различными на каждом уровне в модели ?
Отправлено: aljeshishe от Декабрь 03, 2009, 20:19
А лучше создать, т.к. ищущему ответ на свой вопрос неудобно его выковыривать из темы-каши.
Отредактировал.

Я считал что MVC нужна в том числе и для того что бы одну модель модель можно было различным образом отображать в разных представлениях. Что то мне подсказывает, что если разделить модели получится не очень хорошо, хотя хз надо продумаь этот вопрос. Неужели нет другого способа отобразить различные заголовки?


Название: Re: Как сделать заголовки различными на каждом уровне в модели ?
Отправлено: lit-uriy от Декабрь 03, 2009, 20:25
>>Но в данном случае 2 модели решают обе проблемы.
В общем да, судя по картинке, можно, две модели-посредники сделать