Cambiar el color de fondo de la fila de un QTreeView no funciona

tengo unQTreeView y desea diferentes colores de fondo para las filas, dependiendo de su contenido. Para lograr esto, obtuve unaclass MyTreeView desdeQTreeView e implementó el método de pintura de la siguiente manera:

    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, me pusesetAlternatingRowColors(true); para el QTreeView.

Mi problema: Configurando el color paraQPalette :: Base no tiene efecto. Cada segunda fila permanece blanca.

Sin embargo, la configuraciónQPalette :: AlternateBase funciona como se espera. Lo intentésetAutoFillBackground(true) ysetAutoFillBackground(false) Sin ningún efecto.

¿Hay algún consejo sobre cómo resolver este problema? Gracias.

Observación: Ajustando el color adaptandoMyModel::data(const QModelIndex&, int role) paraQt::BackgroundRole No proporciona el resultado deseado. En este caso, el color de fondo se usa solo para una parte de la fila. Pero quiero colorear la fila completa, incluido el lado izquierdo con las cosas de navegación del árbol.

Versión Qt: 4.7.3

Actualizar: Por razones desconocidasQPalette::Base Parece ser opaco. setBrush no cambia eso. He encontrado la siguiente solución:

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta