Cor de texto personalizada para determinados índices no qtreeview
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).
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