Изменение цвета фона строки в 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);
    }

Ответы на вопрос(3)

Ваш ответ на вопрос