Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom text color for certain indexes in QTreeView

Tags:

c++

qt

qtreeview

I would like to draw texts in one of the columns in a QTreeView widget using a custom color (depending on the data related to each row). I tried to overload the drawRow() protected method and change the style option parameter like this (a stripped-down example):

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

But obviously I am missing something because this does not seem to work (I tried to change also the QPalette::WindowText color role).

like image 585
Vlado Klimovský Avatar asked Sep 09 '09 04:09

Vlado Klimovský


1 Answers

In your model, extend the data() function to return a given color as the Qt::ForegroundRole role.

For example:

virtual QVariant MyModel::data( const QModelIndex &index, int role ) const
{
    if ( index.isValid() && role == Qt::ForegroundRole )
    {
        if ( index.column() == 2 )
        {
            return QVariant( QColor( Qt::red ) );
        }
        return QVariant( QColor( Qt::black ) );
    }

    return QAbstractItemModel::data( index, role );
}
like image 145
Caleb Huitt - cjhuitt Avatar answered Sep 20 '22 21:09

Caleb Huitt - cjhuitt