Pergunta

Gostaria de desenhar textos em uma das colunas em um widget QtreeView usando uma cor personalizada (dependendo dos dados relacionados a cada linha). Tentei sobrecarregar o método protegido Drawrow () e alterar o parâmetro de opção de estilo como este (um exemplo despojado):

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

Mas obviamente estou perdendo alguma coisa porque isso não parece funcionar (tentei mudar também o QPalette::WindowText papel de cor).

Foi útil?

Solução

No seu modelo, estenda o data() função para retornar uma determinada cor como a Qt::ForegroundRole Função.

Por exemplo:

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 );
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top