Изменение цвета фона строки в QTreeView не работает
у меня естьQTreeView
и хотите разные цвета фона для строк, в зависимости от их содержимого. Чтобы добиться этого, я вывелclass MyTreeView
отQTreeView
и реализовал метод рисования следующим образом:
void MyTreeView::drawRow (QPainter* painter,
const QStyleOptionViewItem& option,
const QModelIndex& index) const
{
QStyleOptionViewItem newOption(option);
if (someCondition)
{
newOption.palette.setColor( QPalette::Base, QColor(255, 0, 0) );
newOption.palette.setColor( QPalette::AlternateBase, QColor(200, 0, 0) );
}
else
{
newOption.palette.setColor( QPalette::Base, QColor(0, 0, 255) );
newOption.palette.setColor( QPalette::AlternateBase, QColor(0, 0, 200) );
}
QTreeView::drawRow(painter, newOption, index);
}
Изначально я установилsetAlternatingRowColors(true);
для QTreeView.
Моя проблема: Установка цвета дляQPalette :: Base не имеет никакого эффекта, Каждый второй ряд остается белым.
Однако настройкаQPalette :: AlternateBase работает как положено, Я старалсяsetAutoFillBackground(true)
а такжеsetAutoFillBackground(false)
без какого-либо эффекта.
Есть ли подсказки, как решить эту проблему? Спасибо.
Примечание: Настройка цвета путем адаптацииMyModel::data(const QModelIndex&, int role)
заQt::BackgroundRole
не дает желаемого результата. В этом случае цвет фона используется только для части строки. Но я хочу раскрасить всю строку, включая левую сторону, с помощью дерева навигации.
Версия Qt: 4.7.3
Обновить: По неизвестным причинамQPalette::Base
кажется непрозрачным. setBrush не меняет этого. Я нашел следующий обходной путь:
if (someCondition)
{
painter->fillRect(option.rect, Qt::red);
newOption.palette.setBrush( QPalette::AlternateBase, Qt::green);
}
else
{
painter->fillRect(option.rect, Qt::orange);
newOption.palette.setBrush( QPalette::AlternateBase, Qt:blue);
}