QPushButton圆形渐变边框,带QSS

时间:2017-08-23 13:02:10

标签: css qt border gradient qtstylesheets

我试图制作一些"复杂的" Qt按钮样式,使用QSS,但我面临一个我无法解决的问题。

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

结果想要

所以,这是应用于QPushButton的样式表:

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 个答案:

答案 0 :(得分:2)

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

我可以通过在paint.net(可以使用任何图像创建程序)上创建此精确边框的.png图像来解决此问题。我将背景设置为透明,并确保图像的边框是我想要在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的子类并覆盖其paint事件。在此处绘制边框,并将所有QPushButtons升级到这个新类。不过,这将更加痛苦,因此我个人更喜欢第一个解决方案。

答案 1 :(得分:0)

我搜索了一下,我看到了两种方法,但是第二种方法使用的边框图像与边框半径不兼容,所以你必须处理:之前和之后。

只是为了给你链接来自camilo martin的答案:

查看答案here