Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Rain от Март 15, 2009, 14:46



Название: Subclassing QItemDelegate
Отправлено: Rain от Март 15, 2009, 14:46
Доброго дня,

Нужно кастомизировать отрисовку ячейки QTableView. Для этого делаю наследника от QItemDelegate и переопределяю метод drawDisplay.

И все вроде работает, но не совсем понятно откуда брать следующую информацию:

1. Состояние выбран/не выбран для обрабатываемой ячейки (выбранные прорисовываются с синим фоном). Думал, что эту информацию можно получить из параметра QStyleOptionViewItem& option, но ничего подходящего не нашел:(
2. Как получить информацию о системном стиле? Палитра, размер шрифта?

Заранее спасибо,


Название: Re: Subclassing QItemDelegate
Отправлено: Rcus от Март 15, 2009, 14:58
В доках рекомендуют наследоваться от QStyledItemDelegate и переопределять метод paint (+по необходимости sizeHint).
Чтоже до вопросов:
1. option.state
2. палитру нужно брать из option.palette (системная не подходит, потому что может устанавливаться отдельно для каждого виджета) шрифт option.font.

Если нужно взять информацию из стиля виджета, например для отрисовки рамки фокуса, то можно сделать такой финт (в доках нет описания QStyleOptionViewItemV3::widget, единственное найденное упоминание это http://doc.trolltech.com/4.5/qstyleoptionviewitemv3-members.html):
Код
C++ (Qt)
 
   const QStyleOptionViewItemV3 *optionV3 = qstyleoption_cast<const QStyleOptionViewItemV3 *>(&option);
   QStyle *style = optionV3 ? optionV3->widget->style() : qApp->style();
   style->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, widget);
 
ADD: Мда, после редактирования какой-то бред получился :)