列表代理paint方法绘制背景颜色方法

列表代理中绘制item背景颜色

void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
	QStyleOptionViewItem viewOption(option);
	initStyleOption(&viewOption, index);
	if (option.state.testFlag(QStyle::State_HasFocus))
		viewOption.state &= ~QStyle::State_HasFocus; // 去掉焦点虚线
		
    // 方法一,会绘制边框
	//painter->setBrush(QBrush(QColor(Qt::gray)));//填充灰色,会绘制item边框
	//painter->drawRect(option.rect);

    //方法二,通过把画笔透明度设置0达到无边框效果。绘图前准备画笔、画刷
    QPen oldPen = painter->pen(); //保存旧画笔
    QPen pen; //画笔。绘制图形边线,由颜色、宽度、线风格等参数组成
    pen.setColor(QColor(0,0,0,0));//alpha=0
    QBrush oldBrush = painter->brush();
    QBrush brush;   //画刷。填充几何图形的调色板,由颜色和填充风格组成
    brush.setColor(QColor(0,255,0,120));
    brush.setStyle(Qt::SolidPattern);
    //可在QPaintDevice上绘制各种图形。QPaintDevice有之类QWidget、QImage、QOpenGLPaintDevice等
    painter->setPen(pen);
    painter->setBrush(brush);
    painter->drawRect(option.rect);
    painter->setPen(oldPen);//还原旧画笔
    painter->setBrush(oldBrush);
    
	//方法三,通过绘制图片方式绘制背景颜色
	// 此方式无需手动计算居中
	QStyleOptionViewItem itemStyle = option;
	itemStyle.displayAlignment = Qt::AlignCenter;

	QRect bgRect = itemStyle.rect.adjusted(2, 2, -2, -2);
	static QPixmap bg(bgRect.size());
	bg.fill(QColor(240, 240, 240));
	QApplication::style()->drawItemPixmap(painter, bgRect, Qt::AlignCenter, bg);
	
	// 此方式需要手动计算居中(rect)
	painter->drawPixmap(bgRect, bg);
	
	//绘制文字
	painter->drawText(bgRect, Qt::AlignLeft | Qt::AlignBottom, data.FileInfo.fileName());
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值