C++ 如何为QTableView中的特定单元格着色或使文本加粗?

C++ 如何为QTableView中的特定单元格着色或使文本加粗?,c++,qt,qt4,qtableview,C++,Qt,Qt4,Qtableview,我使用了QTableView在我的Qt程序中查看表格数据,我需要区分一些单元格和其他单元格,可以在这些特定单元格中使用粗体字体或绘制这些特定单元格的背景 有人能提供代码而不是只说使用qabstractemdelegate 我阅读了qabstractemdelegate的文档,但无法理解,请使用示例进行解释 不需要使用抽象委托。样式化委托完成您需要的大部分工作。使用它并仅重新实现所需的行为 .h: 然后将委托应用于视图。如果shouldbebebeld()返回false,代理将像标准代理一样绘制。

我使用了
QTableView
在我的Qt程序中查看表格数据,我需要区分一些单元格和其他单元格,可以在这些特定单元格中使用粗体字体或绘制这些特定单元格的背景

有人能提供代码而不是只说使用
qabstractemdelegate


我阅读了
qabstractemdelegate
的文档,但无法理解,请使用示例进行解释

不需要使用抽象委托。样式化委托完成您需要的大部分工作。使用它并仅重新实现所需的行为

.h:

然后将委托应用于视图。如果
shouldbebebeld()
返回false,代理将像标准代理一样绘制。如果返回true,则将应用粗体字体


我希望这已经足够让您开始了。

为了使文本在表视图中以不同的方式显示,您可以修改您的模型(如果存在),并在模型的
qabstractemmodel::data()
函数中处理
Qt::FontRole
和/或
Qt::ForegroundRole
角色。例如:

QVariant MyModel::data(const QModelIndex &index, int role) const
{
    if (role == Qt::FontRole && index.column() == 0) { // First column items are bold.
        QFont font;
        font.setBold(true);
        return font;
    } else if (role == Qt::ForegroundRole && index.column() == 0) {
        return QColor(Qt::red);
    } else {
        [..]
    }

}

如果您没有模型或代理,并且不想创建模型或代理,可以直接设置单元格的字体:

QFont font(cell->font());
font.setBold(true);
cell->setFont(font);

你好你怎么知道对于
Qt::ForegroundRole
我们可以只返回
QColor
?从文档中我了解到,我们可以返回
QBrush
。我在其中找到此信息的链接是doc states-
Qt::ForegroundRole前景笔刷(通常为文本颜色),用于使用默认委托呈现的项目。(QBrush)
@sami1592,
data()
函数不返回
QColor
,而是使用
QColor
QBrush
构建的
QVariant
。不管它是什么,它最终将通过
qvariant\u cast()转换为
QBrush
它最终将通过qvariant\u cast()转换为QBrush
我们怎么知道这一点?从Qt源代码中?是的,我查看了源代码。这是正确的解决方案,其他人都错了:-)
QVariant MyModel::data(const QModelIndex &index, int role) const
{
    if (role == Qt::FontRole && index.column() == 0) { // First column items are bold.
        QFont font;
        font.setBold(true);
        return font;
    } else if (role == Qt::ForegroundRole && index.column() == 0) {
        return QColor(Qt::red);
    } else {
        [..]
    }
QFont font(cell->font());
font.setBold(true);
cell->setFont(font);