Zmiana koloru tła wiersza QTreeView nie działa

mamQTreeView i chcą różnych kolorów tła dla wierszy, w zależności od ich zawartości. Aby to osiągnąć, wyprowadziłemclass MyTreeView zQTreeView i zaimplementował metodę malowania w następujący sposób:

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

Początkowo ustawiłemsetAlternatingRowColors(true); dla QTreeView.

Mój problem: Ustawianie koloru dlaQPalette :: Baza nie działa. Co drugi rząd pozostaje biały.

Jednak ustawienieQPalette :: AlternateBase działa zgodnie z oczekiwaniami. próbowałemsetAutoFillBackground(true) isetAutoFillBackground(false) bez żadnego efektu.

Czy są jakieś wskazówki, jak rozwiązać ten problem? Dziękuję Ci.

Uwaga: Ustawianie koloru przez dostosowanieMyModel::data(const QModelIndex&, int role) dlaQt::BackgroundRole nie zapewnia pożądanego rezultatu. W tym przypadku kolor tła jest używany tylko dla części wiersza. Ale chcę pokolorować pełny wiersz, łącznie z lewą stroną, z elementami nawigacji drzewa.

Wersja Qt: 4.7.3

Aktualizacja: Z nieznanych powodówQPalette::Base wydaje się nieprzejrzysty. setBrush tego nie zmienia. Znalazłem następujące obejście:

    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