Css QPushButton带QSS的圆形渐变边框
我正在尝试使用Qt和QSS制作一些“复杂”的按钮样式,但我面临一个无法解决的问题 我想做一个渐变圆角边框,例如从左侧的蓝色到右侧的红色: 需要结果 下面是应用于QPushButton的样式表:Css QPushButton带QSS的圆形渐变边框,css,qt,border,gradient,qtstylesheets,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
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;
这是结果
非常难看,对吧?我搜索了一下,发现了两种方法,但第二种方法使用的是边界图像,它与边界半径不兼容,因此您必须处理:before和:after 请将camilo martin的答案与您联系起来:
请参阅答案此问题已作为错误报告给Qt,没有迹象表明他们会修复它: 我可以通过在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;
下面是我的qMain窗口上的最终结果:
您可以做的另一件事是子类化QPushButton并覆盖它的绘制事件。在那里画出你的边界,并将你所有的QpushButton升级到这个新类。不过这会更痛苦,所以我个人更喜欢我的第一个解决方案。删除半径后效果很好。看起来梯度是为边界的半径部分计算的,与边界本身无关。这个半径部分是每个边界角的一半。这是点,我需要一个半径;)遗憾的是,Qt样式表无法访问“:after”关键字。我可以有效地创建一个小部件来堆叠一个矩形和我的按钮,但在这种情况下,我将失去样式表的灵活性。