Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Caduceus от Январь 22, 2009, 23:57



Название: Хочу 2 чексбокса в модели. Переопределять Qt::ItemFlag и добавлять свои флаги?
Отправлено: Caduceus от Январь 22, 2009, 23:57
Что-то я не вполне себе представляю как в С++ дополнять enum своми значениями

Необходимо в TreeView иметь рядом элементом по два чекбокса рядом с именем и целый стобец по 5 чекбоксов (знаете как типа оценка песни в проигрывателях - звездочки такие). Как это сделать миниматьными усилиями?


Название: Re: Хочу 2 чексбокса в модели. Переопределять Qt::ItemFlag и добавлять свои флаги?
Отправлено: ритт от Январь 23, 2009, 03:46
Цитировать
Необходимо в TreeView иметь рядом элементом по два чекбокса рядом с именем
не совсем понимаю. может скриншотик?

Цитировать
и целый стобец по 5 чекбоксов (знаете как типа оценка песни в проигрывателях - звездочки такие). Как это сделать миниматьными усилиями?
examples/itemviews/stardelegate


Название: Re: Хочу 2 чексбокса в модели. Переопределять Qt::ItemFlag и добавлять свои флаги?
Отправлено: Caduceus от Январь 23, 2009, 10:27
Вот так хочется:
(http://www.monados.com/DR/two_cb.PNG)

То есть один чекбокс я сделал, а вот два никак. Это возможно  сделать не делая все руками?


Название: Re: Хочу 2 чексбокса в модели. Переопределять Qt::ItemFlag и добавлять свои флаги?
Отправлено: ритт от Январь 23, 2009, 11:22
если QTreeView, то наследуйся от модели и добавь столбец для дочерних веток - пусть в этом столбце и будет чекбокс...или что?


Название: Re: Хочу 2 чексбокса в модели. Переопределять Qt::ItemFlag и добавлять свои флаги?
Отправлено: Caduceus от Январь 23, 2009, 11:24
Не, это отдельный столбец - так -то понятно, а вот именно чтоб рядом с именем - то есть слева от имени в одном столбце с именем - так можно?


Название: Re: Хочу 2 чексбокса в модели. Переопределять Qt::ItemFlag и добавлять свои флаги?
Отправлено: ритт от Январь 23, 2009, 11:52
конечно, можно.
читать QItemDelegate::{paint,draw*,setEditorData,setModelData,sizeHint}
в модель придётся добавлять обработку пользовательской роли.


Название: Re: Хочу 2 чексбокса в модели. Переопределять Qt::ItemFlag и добавлять свои флаги?
Отправлено: Caduceus от Январь 23, 2009, 11:54
Ой, а можно чуть-чуть поподробнее. Прям самую малость?


Название: Re: Хочу 2 чексбокса в модели. Переопределять Qt::ItemFlag и добавлять свои флаги?
Отправлено: ритт от Январь 23, 2009, 13:05
конечно. http://doc.trolltech.com/main-snapshot/qitemdelegate.html
а ещё examples/itemviews

я ж кидал уже паз на examples/itemviews/stardelegate - посмотрел бы хоть сорцы!


Название: Re: Хочу 2 чексбокса в модели. Переопределять Qt::ItemFlag и добавлять свои флаги?
Отправлено: Caduceus от Январь 23, 2009, 13:11
Да смотрел я сорцы этого StarsDelegate - не то там немного

Ну ладно, спасибо, буду копать


Название: Re: Хочу 2 чексбокса в модели. Переопределять Qt::ItemFlag и добавлять свои флаги?
Отправлено: ритт от Январь 23, 2009, 13:26
всё там то. именно _то_, о чём ты говоришь.
разница лишь в том, что для отрисовки второй галочки тебе необходимо в модели обрабатывать кастомную роль (типа, static const int MyGalo4kaRole = Qt::UserRole + 44;) - вот для этой-самой роли реализовываешь модификации в наследумой модели (в частности data/setData (возможно itemFlags)), а в делегате просишь дату для этой роли и, если в ячейке нужно нарисовать _твою_ галочку, рисуешь её (drawCheck), а отрисовку из суперкласса сдвигаешь на n пикселей (не забудь переопределить sizeHint). ну, и плюс полюбишься слегка ещё с createEditor, etc.