QDialog,QWidget实现圆角,圆弧边框

1.QDialog,QWidget实现圆角,圆弧边框

注意设置使用setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint),去掉dialog的标题栏显示。
在QDialog的的resizeEvent时间中添加一下代码:
void CDemoDlg::resizeEvent(QResizeEvent* e)
{
QBitmap bmp(size()); 
bmp.fill(); 
QPainter p(&bmp); 
p.setRenderHint(QPainter::Antialiasing); 
//p.drawRoundedRect(bmp.rect(), 20, 20); //四个角都是圆弧 
//只要上边角圆弧 
int arcR = 10; //圆弧大小
QRect rect = this->rect().adjusted(0, 0, 0, 0); 
QPainterPath path; 
//逆时针 
path.moveTo(arcR, 0);
//左上角
path.arcTo(0, 0, arcR * 2, arcR * 2, 90.0f, 90.0f);
path.lineTo(0, rect.height()-arcR);
//左下角
path.arcTo(0, rect.height() - arcR * 2 , arcR * 2, arcR * 2, 180.0f, 90.0f);
path.lineTo(rect.width(), rect.height());
//右下角
path.arcTo(rect.width() - arcR * 2, rect.height() - arcR * 2 , arcR * 2, arcR * 2, 270.0f, 90.0f);
path.lineTo(rect.width(), arcR);
//右上角
path.arcTo(rect.width() - arcR * 2, 0, arcR * 2, arcR * 2, 0.0f, 90.0f);
path.lineTo(arcR, 0);
p.drawPath(path);
//此行代码必须添加,不然无法达到正常的显示
p.fillPath(path, QBrush(Qt::red)); 
setMask(bmp);

return QDialog::resizeEvent(e);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值