QTableView,设置单元格的字体和背景颜色

eth*_*ane 4 c++ qt delegates qtableview qpainter

我正在使用 QTableView 和 QStandardItemModel,我试图用保持黑色的字体对行进行着色。

我正在使用我的委托类的绘制方法:

void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QBrush brush(Qt::red, Qt::SolidPattern);
    painter->setBackground(brush);
}
Run Code Online (Sandbox Code Playgroud)

这根本不起作用,它使每个单元格内的文本透明。我在这里做错了什么?

[编辑]我painter->fillRect(option.rect, brush);也使用过,但它使单元格背景和文本具有相同的颜色。

Mar*_*k R 7

Delegate应该继承QStyledItemDelegate

您的绘制事件可能应该如下所示:

void Delegate::paint(QPainter *painter,
                     const QStyleOptionViewItem &option,
                     const QModelIndex &index) const
{
    QStyleOptionViewItem op(option);

    if (index.row() == 2) {
        op.font.setBold(true);
        op.palette.setColor(QPalette::Normal, QPalette::Background, Qt::black);
        op.palette.setColor(QPalette::Normal, QPalette::Foreground, Qt::white);
    }
    QStyledItemDelegate::paint(painter, op, index);
}
Run Code Online (Sandbox Code Playgroud)


Tom*_*mas 5

正如vahancho所建议的,您可以使用该QStandardItem::setData()函数:

QStandardItem item;
item.setData(QColor(Qt::green), Qt::BackgroundRole);
item.setData(QColor(Qt::red), Qt::FontRole);
Run Code Online (Sandbox Code Playgroud)

或者QStandardItem::setBackground()QStandardItem::setForeground()函数:

QStandardItem item;
item.setBackground(QColor(Qt::green));
item.setForeground(QColor(Qt::red));
Run Code Online (Sandbox Code Playgroud)