设置QWidget为圆角矩形(同时设置背景图和圆角矩形)

使用QPainterPath实现圆角矩形背景的无边框QWidget
本文介绍了如何在Qt项目中设置一个带有圆角矩形背景且无边框的QWidget。通过重写paintEvent方法,结合QPainterPath和QBitmap,实现了平滑的圆角矩形效果,并给出了使用QPainterPath绘制圆角矩形的代码示例,对比了setMask方法的效果,展示出更好的视觉体验。

在实际项目开发过程中有时需要设置QWidget中的背景图的同时还需要将其设置为圆角矩形样式。此时可以通过重绘事件完成两项工作。

这里圆角矩形的实现主要是利用了QBitmap,QBitmap作为图片掩码,只有当QBitmap区域上像素为1时,对应的区域内容才能显示。可以先使用QBitmap绘制一个自己需要的区域形状,然后罩在QWidget上即可实现需要的效果。

具体步骤如下:

1. 首先设置属性为无边框(不设置时setMask同样会导致样式为无边框)

setWindowFlags(Qt::FramelessWindowHint);

2. 重写重绘事件

void YourClass::paintEvent(QPaintEvent *event)
{

//绘制样式
QStyleOption opt;
opt.initFrom(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);//绘制样式

QBitmap bmp(this->size());
bmp.fill();
QPainter painter(&bmp);
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::black);
painter.setRenderHint(QPainter::Antialiasing);

//此处可修改圆角矩形大小,也可以绘制为其他想要的形状,比如圆形
painter.drawRoundedRect(bmp.rect(), 12, 12);
//painter.drawEllipse(bmp.rect());绘制圆或椭圆
//该函数便使得QBitmap上像素为1的区域才显示出来
setMask(bmp);

//QPainter p(this);

//此处背景图可自由设置
p.drawPixmap(0, 0, this-&g
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值