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

在实际项目开发过程中有时需要设置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->width(), this->height(), QPixmap(":/testOpenProcess/Image/123.jpeg"));
}

3.运行即可,效果如图所示

上述方法可以满足使用,但图像的会存在较大的毛刺,根据评论区大神指点,可以使用QPainterPath来指定需要绘制的区域,然后再进行绘制,效果更佳,感谢评论区指点。

如要绘制圆角矩形,则可以使用qpainterpath的addRoundedRect函数,指定一个矩形区域,然后调用painter绘制,代码如下:

QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); 
QPainterPath path; 
path.addRoundedRect(rect(), 50, 50);
painter.setClipPath(path); 
painter.drawPixmap(rect(), QPixmap("xxx"));

绘制出的效果如下,明显强于setmask的效果。

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值