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

标签 c++ qt delegates qtableview qpainter

我正在使用 QTableView 和 QStandardItemModel,我正在尝试为一行着色,字体保持黑色。

我正在使用我的委托(delegate)类的 paint 方法:

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

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

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

最佳答案

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

关于c++ - QTableView,设置单元格的字体和背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35575564/

相关文章:

c++ - 如何在 Qt 中使用 .NET Framework 中的系统命名空间?

linux - 在 Linux 上将 Crashpad 与 Qt 集成

c# - 什么是 Func,如何以及何时使用

c++ - 迭代器实现——(链表队列)

c++ - 如何向多个进程(但不是所有进程)广播或发送单个值?

c++ - 销毁 delete 是否仍然需要可以访问析构函数?

c++ - 将 bool 标志更改为模板参数

从 Axis 相机播放 Qt 音频

c# - 委托(delegate)是否可以在不实例化的情况下调用类的方法?

objective-c - Objective-C 委托(delegate)真的是多线程的吗?