Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css QPushButton带QSS的圆形渐变边框_Css_Qt_Border_Gradient_Qtstylesheets - Fatal编程技术网

Css QPushButton带QSS的圆形渐变边框

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

我正在尝试使用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;
这是结果


非常难看,对吧?

我搜索了一下,发现了两种方法,但第二种方法使用的是边界图像,它与边界半径不兼容,因此您必须处理: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”关键字。我可以有效地创建一个小部件来堆叠一个矩形和我的按钮,但在这种情况下,我将失去样式表的灵活性。