代码之家  ›  专栏  ›  技术社区  ›  aRaMinet

QPushButton带QSS的圆形渐变边界

  •  2
  • aRaMinet  · 技术社区  · 7 年前

    我想做一个渐变圆形边框,例如从左侧的蓝色到右侧的红色:

    想要的结果

    background:
        white;
    border-radius:
        30px;
    border-style:
        solid;
    border-width:
        10px;
    border-color: 
        qlineargradient(x1:0, y1:0, x2:1, y2:0, stop: 0 blue, stop: 1 red)
        red
        qlineargradient(x1:0, y1:0, x2:1, y2:0, stop: 0 blue, stop: 1 red)
        blue;
    

    这是结果。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Link H.    6 年前

    该问题已作为一个错误报告给Qt,没有迹象表明他们会修复它: https://bugreports.qt.io/browse/QTBUG-2221

    我可以通过创建一个。绘制上的png图像。net(您可以使用任何图像创建程序)的精确边界。我将背景设置为透明,并确保图像的边框是我想要的QPushButton上的边框。然后设置。png文件作为资源,并在QPushButton样式表中输入:

    border: none;
    border-image: url(:/icons/images/blue-red-gradient.png);
    background-color: rgb(255, 255, 255);
    border-radius: 15px;
    

    下面是我的QMainWindow上的最终结果: enter image description here

    您可以做的另一件事是对QPushButton进行子类化,并覆盖其绘制事件。在那里绘制边界,并将所有QPushButtons推广到这个新类。不过,这更令人痛苦,所以我个人更喜欢我的第一个解决方案。

        2
  •  0
  •   Neil    7 年前

    我搜索了一下,发现了两种方法,但第二种方法使用的是边界图像,它与边界半径不兼容,因此您必须处理:before和:after。

    看到答案了吗 here