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

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt 之 设置窗口边框的圆角(使用QSS和PaintEvent两种方法)相关的知识,希望对你有一定的参考价值。

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

一、使用setStyleSheet方法

this->setStyleSheet(“QWidget{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() - 1);
    rect.setHeight(rect.height() - 1);
    painter.drawRoundedRect(rect, 15, 15);
    //也可用QPainterPath 绘制代替 painter.drawRoundedRect(rect, 15, 15);
    {
        QPainterPath painterPath;
        painterPath.addRoundedRect(rect, 15, 15);
        p.drawPath(painterPath);
    }
    QWidget::paintEvent(event);
}

效果如下:

技术分享

如果不写painter.setRenderHint(QPainter::Antialiasing);则圆角会出现锯齿,如下图。 
技术分享 
仔细对比上图可以看见圆角曲线有锯齿状。

注意:

(1)在使用这两种方法的时候需要设置窗口的属性。
    this->setAttribute(Qt::WA_TranslucentBackground);//设置窗口背景透明
    this->setWindowFlags(Qt::FramelessWindowHint);   //设置无边框窗口

(2)主窗体加载不了样式时需要在paintEvent事件中加上如下代码。
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
    QWidget::paintEvent(event);
}

设置按钮的背景边框

原始图 
技术分享

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

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

 

http://blog.csdn.net/goforwardtostep/article/details/52084538

以上是关于Qt 之 设置窗口边框的圆角(使用QSS和PaintEvent两种方法)的主要内容,如果未能解决你的问题,请参考以下文章

Qt之使用QSS设置QPushButton图标和文本的位置

Qt5 圆角加阴影窗口简单实现

QT4:带圆角的透明窗口

Qt开源作品18-无边框背景透明窗体

Qt开源作品18-无边框背景透明窗体

PyQt5——QSS