设置QTableView每行的背景颜色

liuyuanmei 2014-04-18 05:16:03
QTableView的model是QAbstractTableModel,又无法得到view的每个item,该如何实现设置QTableView各行的背景颜色呢?
...全文
7804 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
phoot 2016-07-27
  • 打赏
  • 举报
回复
MyTableModel继承自QSqlTableModel QColor MyTableModel::calculateBGColorForRow(int row) const { if(row%2==0) return QColor(Qt::gray); else return QColor(Qt::green); } QVariant MyTableModel::data(const QModelIndex &idx, int role) const { if (role == Qt::BackgroundRole) { int row = idx.row(); QColor color = calculateBGColorForRow(row); return QBrush(color); }/*else if (role==Qt::ForegroundRole) { int row = idx.row(); QColor color = calculateFRColorForRow(row); return QBrush(color); }*/ return QSqlTableModel::data(idx, role); } 效果图
qq_33454453 2015-12-21
  • 打赏
  • 举报
回复
arr_row_list?哪来的 菜鸟求教
QQ_278397935 2014-11-20
  • 打赏
  • 举报
回复
世界因为有你而精彩。
柳11 2014-05-23
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_a6fb6cc90101i8it.html,look
liuyuanmei 2014-04-21
  • 打赏
  • 举报
回复
qtableView行的背景色是不是一初始化的时候设置的,而是当引起表格变化时,才要去设置指定行的背景颜色
liuyuanmei 2014-04-21
  • 打赏
  • 举报
回复

QVariant CSVTableModel::data( const QModelIndex &index, int role ) const
 {	
    CTableModel::data(index,role);
 	if ( !index.isValid() )
 	{		
 		return QVariant();
 	}	
	else if (role == Qt::DisplayRole || role == Qt::EditRole )
	{
		try
		{
			int a=m_RowList.count();
			int b=m_RowList[index.row()].m_strRowValueList.size();
			int c=index.column();
			int r=index.row();
			if(b>c)
				return m_RowList[index.row()].m_strRowValueList[index.column()];
			else
				return QVariant();
		}
		catch(...)
		{
			return QVariant();
		}
	}
	else if ( role == Qt::BackgroundRole )
	{
		return QBrush( Qt::green );
	}
	else if (role == Qt::ForegroundRole)
	{
		return QBrush(Qt::black);
	}

	return QVariant();
 }

void CSVWnd::AddExtRefOneToOne( int index )
{
	QItemSelectionModel* pSelectModel =  m_pUi_SVWnd->m_SVLDTable->selectionModel();

	if(NULL == pSelectModel)
	{
		return;
	}	

	pSelectModel = m_pUi_SVWnd->m_FCDATable->selectionModel();
	if(NULL == pSelectModel)
	{
		return;
	}
	QModelIndexList modellist = pSelectModel->selectedRows();
	CExtSVTableModel* pFCDAModel = m_pExtSVTableModel;
	CExtRefSVTableModel* pExtRefModel = m_pExtRefTableModel;
	if(modellist.size()>32)
	{
		QMessageBox::information(this, "关联数目", "每次选择的采样输出不能超过32个!");

		return;
	}	
	
	//LN下内部地址对多个外部索引;对于同一个外部索引,LN下只能有一个内部地址与其对应
	
	QStringList fcda = pFCDAModel->GetFCDAByRow(modellist[index].row());
	QString outIndex = pFCDAModel->GetOutIndexByRow(modellist[index].row());
	bool bCanInsert= pExtRefModel->InsertRow(outIndex ,fcda);

	const QModelIndex modelIndex = m_pUi_SVWnd->m_SVLDTable->m_index;
	if ( bCanInsert )
	{
                              //设置指定的地方的背景颜色为绿色,好像不起作用
            	              m_pUi_SVWnd->m_SVLDTable->model()->setData(m_pUi_SVWnd->m_SVLDTable->m_index,QColor(Qt::green), Qt::BackgroundRole);
	}
	else
	{		
		 m_pUi_SVWnd->m_SVLDTable->model()->setData(modelIndex,QColor(Qt::red), Qt::BackgroundRole);
	}		
	
	setRefTableViewHeight( m_pExtRefTableModel->rowCount() );
	pExtRefModel->Refresh();

	setTableViewFontAndRowHeight( 2 );
}
gucunlin 2014-04-21
  • 打赏
  • 举报
回复
用QStandardItemModel是有 item比那个功能多。
smq 2014-04-21
  • 打赏
  • 举报
回复
引用 楼主 liuyuanmei 的回复:
QTableView的model是QAbstractTableModel,又无法得到view的每个item,该如何实现设置QTableView各行的背景颜色呢?
非常详细
一去丶二三里 2014-04-19
  • 打赏
  • 举报
回复
重新实现data函数,在里面处理!可以通过QModexIndex获取到索引所在的行号、列号! 根据角色判断是否为背景,然后设定颜色! QVariant TableModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if(NULL == arr_row_list) return QVariant(); if(arr_row_list->size() < 1) return QVariant(); if (role == Qt::TextAlignmentRole) { return int(Qt::AlignLeft | Qt::AlignVCenter); } else if (role == Qt::DisplayRole) { if(index.row() >= arr_row_list->size()) return QVariant(); if(index.column() >= arr_row_list->at(0).size()) return QVariant(); return arr_row_list->at(index.row()).at(index.column()); } else if(role == Qt::BackgroundColorRole ) { if(index.row()%5 == 0) return QColor(Qt::red); else if(index.row()%5 == 1) return QColor(Qt::green); else if(index.row()%5 == 2) return QColor(Qt::blue); else if(index.row()%5 == 3) return QColor(Qt::yellow); else if(index.row()%5 == 4) return QColor(Qt::gray); else return QVariant(); } return QVariant(); } 效果如下:

21,474

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧