Alterar a cor de fundo da linha de um QTreeView não funciona

eu tenho umQTreeView e deseja cores de fundo diferentes para linhas, dependendo do conteúdo. Para conseguir isso, eu deduziclass MyTreeView deQTreeView e implementou o método de pintura da seguinte forma:

    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);
    }

Inicialmente, eu definisetAlternatingRowColors(true); para o QTreeView.

Meu problema: Definir a cor paraQPalette :: Base não tem efeito. Cada segunda linha permanece branca.

No entanto, a configuraçãoQPalette :: AlternateBase funciona conforme o esperado. eu tenteisetAutoFillBackground(true) esetAutoFillBackground(false) sem qualquer efeito.

Há alguma sugestão de como resolver este problema? Obrigado.

Observação: Configurando a cor adaptandoMyModel::data(const QModelIndex&, int role) paraQt::BackgroundRole não fornece o resultado desejado. Nesse caso, a cor do plano de fundo é usada apenas para uma parte da linha. Mas eu quero colorir a linha completa, incluindo o lado esquerdo com o material de navegação da árvore.

Versão Qt: 4.7.3

Atualizar: Por razões desconhecidasQPalette::Base parece ser opaca. setBrush não altera isso. Eu encontrei a seguinte solução alternativa:

    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);
    }

questionAnswers(3)

yourAnswerToTheQuestion