Qt在设置窗口边框圆角时有两种方式,一种是设置样式,另一种是在paintEvent事件中绘制窗口。下面分别叙述用这两种方式来实现窗口边框圆角的效果。

一、使用setStyleSheet方法
 this->setStyleSheet(“QWidget{background-color:gray;border-top-left-radius:15px;border-top-right-radius:5px;}”));  
使用的主要是使用border-radius 属性,关于这个属性,可选的样式有
border-top-left-radius 设置左上角圆角;
border-top-right-radius 设置右上角圆角;
border-bottom-left-radius 设置左下角圆角;
border-bottom-right-radius 设置右下角圆角;
border-radius 设置四个角圆角;

关于border-radius 后面的参数
(1)一个参数
border-radius:15px

(2)两个参数
border-radius: 15px 50px
第一个参数设置X轴方向的半径
第二个参数设置Y轴方向的半径

从图中可以看出设置一个参数代表X轴和Y轴设置了同样的值,而两个参数分别为X轴和Y轴方向的半径。大家可以根据不同需要去设置参数。

二、在paintEvent事件中绘制窗口边框
这里我们需要重写paintEvent方法,具体代码如下:

void paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing); // 反锯齿;
painter.setBrush(QBrush(Qt::red));
painter.setPen(Qt::transparent);
QRect rect = this->rect();
rect.setWidth(rect.width() - );
rect.setHeight(rect.height() - );
painter.drawRoundedRect(rect, , );
//也可用QPainterPath 绘制代替 painter.drawRoundedRect(rect, 15, 15);
{
QPainterPath painterPath;
painterPath.addRoundedRect(rect, , );
p.drawPath(painterPath);
}
QWidget::paintEvent(event);
}

效果如下:

如果不写painter.setRenderHint(QPainter::Antialiasing);则圆角会出现锯齿,如下图。

仔细对比上图可以看见圆角曲线有锯齿状。

注意:

()在使用这两种方法的时候需要设置窗口的属性。
this->setAttribute(Qt::WA_TranslucentBackground);//设置窗口背景透明
this->setWindowFlags(Qt::FramelessWindowHint); //设置无边框窗口 ()主窗体加载不了样式时需要在paintEvent事件中加上如下代码。
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
QWidget::paintEvent(event);
}

设置按钮的背景边框
原始图

设置无边框或者背景透明可以去掉白色方框

给按钮设置如下样式即可。
 {background-color:transparent;}  
或者
 {border:none;}

原文链接:

Qt 之 设置窗口边框的圆角

QT:圆角设置的更多相关文章

  1. Qt 之 设置窗口边框的圆角(使用QSS和PaintEvent两种方法)

    Qt在设置窗口边框圆角时有两种方式,一种是设置样式,另一种是在paintEvent事件中绘制窗口.下面分别叙述用这两种方式来实现窗口边框圆角的效果. 一.使用setStyleSheet方法 this- ...

  2. qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新

    qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新 Widget wit ...

  3. QT 常用设置

    博文都写在了云笔记里面了,见谅,不想维护两个版本. QT 常用设置

  4. Qt中设置widget背景颜色/图片的注意事项(使用样式表 setStyleSheet())

    在Qt中设置widget背景颜色或者图片方法很多种:重写paintEvent() , 调色板QPalette , 样式表setStyleSheet等等. 但是各种方法都有其注意事项,如果不注意则很容易 ...

  5. Qt之设置QWidget背景色(QStyleOption->drawPrimitive(QStyle::PE_Widget)方法比较有趣)

    QWidget是所有用户界面对象的基类,这意味着可以用同样的方法为其它子类控件改变背景颜色. Qt中窗口背景的设置,下面介绍三种方法. 1.使用QPalette2.使用Style Sheet3.绘图事 ...

  6. UIView圆角设置

    对于UIview的圆角设置最简单的就是layer的两个属性分别是cornerRadius和masksToBounds,但是对于设置其中某一个角为圆角的时候需要使用贝塞尔曲线 UIView *aView ...

  7. iOS-UIView指定圆角设置

    圆角设置可以指定左上.左下.右上.右下角:单个指定或多个指定. ///设置圆角[左上.右上角] - (void)setCircular{ UIBezierPath *maskPath = [UIBez ...

  8. 3dsmax不同版本 pyside qt UI 设置max窗口为父窗口的方法

    3dsmax不同版本 pyside qt widget 设置 max 窗口为父窗口的方法 前言: 3dsmax 在 2014 extension 之后开始集成 Python 和 PySide,但是在版 ...

  9. QT中设置窗口背景颜色

    QWidget是所有用户界面对象的基类,这意味着可以用同样的方法为其它子类控件改变背景颜色. Qt中窗口背景的设置,下面介绍三种方法. 1.使用QPalette 2.使用Style Sheet 3.绘 ...

随机推荐

  1. P2670 【扫雷游戏】

    题面哦~~ lalala~~~ 这题数据并不大,最大不过100*100,所以果断穷举 其实本来我是想边读边做的,但读入是个问题. 主要思路呢,就是读完之后穷举一边,只要是炸弹,就把周围一圈8个加一遍 ...

  2. Python 入门 之 包

    Python 入门 之 包 1.包 (1)什么是包? 文件夹下具有_ init.py _的文件夹就是一个包 (2)包的作用: 管理模块(文件化) (3)包的导入: 导入: 启动文件要和包文件是同级 绝 ...

  3. java执行bat代码

    java执行bat代码.txt public static void runbat(String path,String filename) { String cmd = "cmd /c s ...

  4. expect批量分发密钥对

    vim shell.exp #!/usr/bin/expect set timeout 10 set hostname [lindex $argv 0] set username [lindex $a ...

  5. Adam作者大革新, 联合Hinton等人推出全新优化方法Lookahead

    Adam作者大革新, 联合Hinton等人推出全新优化方法Lookahead   参与:思源.路.泽南 快来试试 Lookahead 最优化方法啊,调参少.收敛好.速度还快,大牛用了都说好. 最优化方 ...

  6. intelij IDEA设置goole code style风格

    1.安装google-java-format 插件      file ->Setings... ->pligins     输入上诉插件安装 2.下载IntelliJ Java Goog ...

  7. [Nest] 02.nest之控制器

    控制器 Controller Nest 的核心概念 模块 Module 控制器 Controller 服务与依赖注入 Provider Dependency injection 控制器负责处理应用的特 ...

  8. 【学习总结】Markdown 使用-表格及其居中等格式

    参考: Learning-Markdown (Markdown 入门参考)-表格 Markdown 注:主要是github中的使用 要点: 不管是哪种方式,第一行为表头,第二行为分割表头和主体部分,第 ...

  9. python time,calendar,datetime

    time sleep:休眠指定的秒数(可以是小数) localtime:将一个时间戳转换为time.struct_time类型的对象(类似于元组) # 将一个时间戳转换为一个类似于元组的对象,不指定时 ...

  10. vue-router实现原理

    vue-router实现原理 近期面试,遇到关于vue-router实现原理的问题,在查阅了相关资料后,根据自己理解,来记录下.我们知道vue-router是vue的核心插件,而当前vue项目一般都是 ...