Chciałbym narysować teksty w jednej z kolumn w widgecie QTreeView przy użyciu niestandardowego koloru (w zależności od danych związanych z każdym wierszem). Starałem się przeciążać drawRow() metoda chronione i zmienić parametr opcji styl tak (okrojoną przykład):Niestandardowy kolor tekstu dla niektórych indeksów w QTreeView
virtual void drawRow(QPainter* p_painter, const QStyleOptionViewItem& option,
const QModelIndex& index) const
{
QStyleOptionViewItem optionCustom = option;
if (index.column() == 2)
{
optionCustom.palette.setColor(QPalette::Text, Qt::red);
}
QTreeView::drawRow(p_painter, optionCustom, index);
}
Ale oczywiście ja czegoś brakuje, ponieważ nie wydaje się działać (próbowałem zmień także rolę koloru na QPalette::WindowText
).
Dzięki! Nie wiedziałem, że metoda 'data()' jest używana również do wyglądu przedmiotu. Zaimplementowałem to, co chciałem, używając niestandardowego elementu delegowanego, z przesłoniętą metodą 'paint()', ale użycie metody 'data()' jest jeszcze bardziej eleganckie. –
@ VladoKlimovský tak, ale jest kilku purystów, którzy nie sądzą, że powinny być używane do wyglądu, ponieważ chcą, aby treść i wygląd były traktowane osobno (model kontra delegat). – neuronet