Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Nemo2000 от Март 09, 2011, 18:44



Название: [РЕШЕНО]Отступ для дочерних ветвей в QTreeView
Отправлено: Nemo2000 от Март 09, 2011, 18:44
Необходимо убрать отступ слева для дочерних ветвей в дереве. setIndentation() мало помогает, так как для корневых елеметов отступ должен остаться.
Длительный поиск по инету ничего толкового не дал. Открытых тем довольно много, но конкретных ответов нет..
Перерисовка с помощью drawRow() почему-то не работает, возможно неправильно использую...
помогите кто может :-\


Название: Re: Отступ для дочерних ветвей в QTreeView
Отправлено: fuCtor от Март 09, 2011, 18:50
Посмотрите в сторону перегрузки и установки делегата (QItemDelegate)


Название: Re: Отступ для дочерних ветвей в QTreeView
Отправлено: Nemo2000 от Март 09, 2011, 19:22
А если у меня уже унаследован делегат от QStyledItemDelegate?
там есть метод paint()..но до меня всёравно не доходит как поменять нужную для рисования область )


Название: Re: Отступ для дочерних ветвей в QTreeView
Отправлено: fuCtor от Март 09, 2011, 20:38
откройте исходники этого делагата и посмотрите как у них реализовано, потом можно и самому отрисовать как душе угодно.

А в исходниках видим следующее:
Код
C++ (Qt)
void QStyledItemDelegate::paint(QPainter *painter,
       const QStyleOptionViewItem &option, const QModelIndex &index) const
{
   Q_ASSERT(index.isValid());
 
   QStyleOptionViewItemV4 opt = option;
   initStyleOption(&opt, index);
 
   const QWidget *widget = QStyledItemDelegatePrivate::widget(option);
   QStyle *style = widget ? widget->style() : QApplication::style();
   style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget);
}

Для отрисовки использует параметр option, который содержит rect той области где рисовать. Следовательно переопределяем paint, в нем копируем option в новую переменную, сдвигаем область как надо и передаем дальше классу предку. Не проверял, но должно получиться. Можно добиться и большего контроля, если скопировать весь этот процесс и самому заполнить opt для отрисовки. В том числе можно сделать и разного цвета строки и тд и тп на что фантазии хватит.


Название: Re: Отступ для дочерних ветвей в QTreeView
Отправлено: Nemo2000 от Март 09, 2011, 21:20
Да! :)
Заработало! ;D
Так как и говорили, создал копию QStyleOptionViewItem, подредактировал rect и передал дальше классу-предку =)