У меня есть QTableView, для которого я устанавливаю пользовательский QStyledItemDelegate.
В дополнение к пользовательской раскраске элементов, я хочу стилизовать цвет фона строки для состояний выделения / наведения. Внешний вид, который я собираюсь сделать, похож на этот скриншот KGet:
Фон строки KGet http://www.binaryelysium.com/images/kget_background.jpeg
Вот мой код:
void MyDelegate::paint( QPainter* painter, const QStyleOptionViewItem& opt, const QModelIndex& index ) const
{
QBrush backBrush;
QColor foreColor;
bool hover = false;
if ( opt.state & QStyle::State_MouseOver )
{
backBrush = opt.palette.color( QPalette::Highlight ).light( 115 );
foreColor = opt.palette.color( QPalette::HighlightedText );
hover = true;
}
QStyleOptionViewItemV4 option(opt);
initStyleOption(&option, index);
painter->save();
const QStyle *style = option.widget ? option.widget->style() : QApplication::style();
const QWidget* widget = option.widget;
if( hover )
{
option.backgroundBrush = backBrush;
}
painter->save();
style->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, widget);
painter->restore();
switch( index.column() )
{
case 0: // we want default behavior
style->drawControl(QStyle::CE_ItemViewItem, &option, painter, widget);
break;
case 1:
// some custom drawText
break;
case 2:
// draw a QStyleOptionProgressBar
break;
}
painter->restore();
}
В результате каждая отдельная ячейка получает фон mousedover только тогда, когда на нем находится мышь, а не весь ряд. Трудно описать, вот скриншот:
Результат приведенного выше кода http://www.binaryelysium.com/images/loader_bg.jpeg
На этом рисунке мышь была над самой левой ячейкой, отсюда и выделенный фон ... но я хочу, чтобы фон рисовался по всей строке.
Как мне этого добиться?
Редактировать: Подумав еще немного, я понял, что состояние QStyle :: State_MouseOver передается только для фактической ячейки, над которой находится мышь, и когда метод рисования вызывается для других ячеек в строке QStyle :: State_MouseOver не установлен.
Таким образом, возникает вопрос: существует ли состояние QStyle :: State_MouseOver_ Row (ответ: нет), так как мне добиться этого?