zoukankan      html  css  js  c++  java
  • QT:圆角设置

    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() - 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);
    }


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

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

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

    原文链接:

    Qt 之 设置窗口边框的圆角

  • 相关阅读:
    HDU 5486 Difference of Clustering 图论
    HDU 5481 Desiderium 动态规划
    hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值
    HDU 5478 Can you find it 随机化 数学
    HDU 5477 A Sweet Journey 水题
    HDU 5476 Explore Track of Point 数学平几
    HDU 5475 An easy problem 线段树
    ZOJ 3829 Known Notation 贪心
    ZOJ 3827 Information Entropy 水题
    zoj 3823 Excavator Contest 构造
  • 原文地址:https://www.cnblogs.com/2018shawn/p/11433941.html
Copyright © 2011-2022 走看看