Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: sersar от Февраля 17, 2009, 18:46



Название: Список
Отправлено: sersar от Февраля 17, 2009, 18:46
Здравствуйте!

Мне необходимо сделать список как я указал на картинке. Есть строки-заголовки. И раскрывающиеся строки. Но просто вставить строку мне не подходит. Надо чтоб строчка была как таблица с ячейками. Возможно так сделать?


Название: Re: Список
Отправлено: pastor от Февраля 17, 2009, 18:50
В сторону QTree*(Widget, View) + QItemDelegate смотрел?


Название: Re: Список
Отправлено: sersar от Февраля 17, 2009, 19:08
В сторону QTree*(Widget, View) + QItemDelegate смотрел?
Смотрю ассистент в 3-х экземплярах. Не могу только сделать :(


Название: Re: Список
Отправлено: pastor от Февраля 17, 2009, 20:24
Все очень просто.

1) Пишешь свой делегат для QTreeWidget. Нужно наследоваться от QItemDelegate и перегрузить метод paint (будем отрисоввывать рамку вокруг айтема). Выглядеть будет это примерно так:

Код
C++ (Qt)
void TreeWidgetDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
   painter->drawRect(option.rect);
   QItemDelegate::paint(painter, option, index);
}

2) Берешь QTreeWidget, устанавливаешь для него setRootIsDecorated(false) чтобы издавится от элементов раскрытия\закрытия веток дерева.
3) Устанавливаешь нужное тебе кол-во колонок - setColumnCount(...)
4) Устанавливаешь для QTreeWidget созданый тобой делегат
5) Заполняешь дерево, при этом нужно позволить редактирование ячеек. Это делается путем установки флага Qt::ItemIsEditable для айтема:

Код
C++ (Qt)
item->setFlags(item->flags() | Qt::ItemIsEditable);