qt自定义qtablemodel实现改变item的背景色

975 阅读1分钟

如果你使用的是qtablewidget就非常简单,只需要

qtablewidget->item(i,j)->setBackground(QBrush(0,0,0));

如果你的qtableview没有使用自定义模型,也是可以用的:

qtableview->item(i,j)->setBackground(const QBrush &brush)

但是当你使用自定义模型,也就是继承QAbstractTableModel 则不可以使用这些方法,当然重写model可以提升性能,自然也就少了一些方便的api 如果你只是处理小数据,使用前面2个就可以,没必要重写model 下面自定义qtablemodel看处理方法: qt的文档里写到,自定义需要重写data方法 在这里插入图片描述 data的最后一个参数,就是告诉model是做什么的: 在这里插入图片描述 可以看到Qt::BackgroundRole就是设置背景色的。 所以在data函数中加入以下代码:

if (role == Qt::BackgroundColorRole)
{	
		return QColor(Qt::red);			
}

这个确实会改变背景色,但是是全部的index都改变了 我只想改变某一项,比如说我有一项有问题,我项让他显示红色。 这个时候只需要加一个判断即可。

if (role == Qt::BackgroundColorRole)
{
	if (index.row() == m_errorRow && index.column() == m_errorCol)
	{
		return QColor(Qt::red);
	}		
}

m_errorRow和m_errorCol需要外部进行传入。

void EP_YearTestResultModel::setErrorRowAndCol(int row, int col)
{
	m_errorRow = row;
	m_errorCol = col;
}

传入值之后就会那一项index就会变成红色。 测试代码:

m_pYearResultModel->setErrorRowAndCol(5, 20);

效果图: 在这里插入图片描述

喜欢的记得点个赞再走,求求彦祖了,就点个赞吧