QTreeView绘制行不同颜色

说重点,我使用的方法是重写model的data函数和QTreeView的drawBranches。data函数可以控制item行背景色,但是,并不能控制树的下拉控制部分的背景色,这个由drawBranches来配合。

 

上代码:

QVariant MyModel::data(const QModelIndex &index, int role /*= Qt::DisplayRole*/) const
{
	if (!index.isValid())
			return QStandardItemModel::data(index, role);
	
        //可以在item里记录一些信息,这里用来作为控制条件
		QStandardItem* pItem = itemFromIndex(index);
		if (pItem && role == Qt::BackgroundRole)
		{
			if (pItem->data(Qt::UserRole).toBool())
				return QColor(Qt::red);
		}
 	
 	// Handle other roles
	return QStandardItemModel::data(index, role);
}

void MyTreeView::drawBranches(QPainter * painter, const QRect& rect,const QModelIndex& index)const
{
	QStandardItemModel* pModel = dynamic_cast<QStandardItemModel*>(this->model());
	QStandardItem* pItem = pModel->itemFromIndex(index);
       //可以在item里记录一些信息,这里用来作为控制条件
	if (pItem && pItem->data(Qt::UserRole).toBool())
	{
		painter->fillRect(rect, QColor(Qt::red));
	}

	 QTreeView::drawBranches(painter,rect,index);
}

主要就是上边的代码,如果效果还是没绘制出来,检查下QTreeView的样式,有没有在qss里设置了QTreeView::item:alternate ,QTreeView::branch:alternate的背景色,如果设置了可能会不生效。

再不行就终极大法,delegate里重绘。不过我试了重绘,掌握不好绘制的rect区域,和绘制次序,所以放弃了~~如果你用的delegate重绘,麻烦一起交流下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值