C# 设置DEV控件gridview单元格字体颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 设置DEV控件gridview单元格字体颜色相关的知识,希望对你有一定的参考价值。

这里指的某个单元格是指 精确到某一行某一列 的单元格。

下面这些属性 都属于原生的gridView 所具有的
gridView[column, row].Style.ForeColor = Color.Red;//设置第row行column列的单元格字体颜色
gridView.Rows[row].DefaultCellStyle.ForeColor = Color.Red;//设置第row行的行字体颜色
gridView.Columns[column].DefaultCellStyle.ForeColor = Color.Yellow;//设置第column列的列字体

dev所封装过的gridView 都没有上面的属性的。

var style = new StyleFormatCondition (FormatConditionEnum.Equal,gridView .Columns["id"], null, detailId);
style .ApplyToRow = true;
style .Appearance.ForeColor = Color.Red;
上面的代码是设置整行字体的颜色,但不知道如何治设置某一单元格字体颜色
求dev下的gridView正确设置某一单元格的字体颜色的方法

参考技术A

DEV的gridView属性是封装了的,大部分新属性在Option开头的几个分类中

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

【中文标题】QTableView,设置单元格的字体和背景颜色【英文标题】:QTableView, setting a cell's font and background colour 【发布时间】:2016-02-23 10:55:03 【问题描述】:

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

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

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);,但它使单元格背景和文本颜色相同。

【问题讨论】:

您不需要使用委托。只需尝试使用 Qt::FontRoleQt::BackgroundColorRole 角色的 QStandardItem::setData() 函数。 它不会使文本透明它不会被绘制,因为您的实现什么都不做。你的班级Delegate 继承了有用的东西吗? 我添加了一个drawDisplay() 函数和fillRect(),它似乎可以做我想做的事情,绘制背景并将文本保持黑色 再次:您根本没有绘制任何文本,委托方法应该这样做!最好的解决方案是使用现有的实现并仅更改一些数据!再说一遍:Delegate 继承了什么? 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

QStandardItem item;
item.setData(QColor(Qt::green), Qt::BackgroundRole);
item.setData(QColor(Qt::red), Qt::FontRole);

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

QStandardItem item;
item.setBackground(QColor(Qt::green));
item.setForeground(QColor(Qt::red));

【讨论】:

完美。在简单的情况下确实不需要委托! THX【参考方案3】:

这对我有用:

class TableViewDelegateWritable : public QStyledItemDelegate

    Q_OBJECT
public:
    explicit TableViewDelegateWritable(QObject *parent = 0)
        : QStyledItemDelegate(parent)
    
    

    // background color manipulation
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
    
        QColor background = QColor(135, 206, 255); // RGB value: https://www.rapidtables.com/web/color/blue-color.html
        painter->fillRect(option.rect, background);

        // Paint text
        QStyledItemDelegate::paint(painter, option, index);
    

    // only allow digits
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
    
        QSpinBox *editor = new QSpinBox(parent);

        editor->setMinimum(-99999);
        editor->setMaximum(99999);

        return editor;
    
;

然后在 main() 中将委托分配给 tableview,如下所示:

for(int c = 0; c < ui->tableView->model()->columnCount(); c++)

    ui->tableView->setItemDelegateForColumn(c, new TableViewDelegateWritable(ui->tableView));

【讨论】:

以上是关于C# 设置DEV控件gridview单元格字体颜色的主要内容,如果未能解决你的问题,请参考以下文章

Dev控件GridView单元格绑定控件

C# winfrom程序 dev控件 gridview实现鼠标悬浮变色,离开颜色恢复

c# gridview 分页后根据内容改变字体颜色

c#winFORM 的dataGridView 控件 单元格 颜色报警

C#导出Excel时怎么设置单元格的格式为数值类型

c#winfrom中gridview控件怎样设置让表头不可点击,还有下面点击全选中,还不是点击只显示一个单元格,求助,谢