在qt样式表中使用变量

在qt样式表中使用变量,qt,qtstylesheets,Qt,Qtstylesheets,是否有可能为.qss文件中的十六进制/rgb数指定变量名。嗯 myColor = #FFCC08 QPushButton { background-color: myColor;} 因此,我可以在样式表顶部定义变量,并在需要时使用变量名,而不是使用十六进制代码。此外,如果我需要改变颜色,那么我必须在一个地方改变,它将通过文件反映出来 我也搜索了,但不知道如何在qt中使用它 谢谢:)使用纯Qt样式表是不可能实现的 你可以通过在C++代码中修改和重新加载样式表来实现类似的效果,例如: QStrin

是否有可能为.qss文件中的十六进制/rgb数指定变量名。嗯

myColor = #FFCC08
QPushButton { background-color: myColor;}
因此,我可以在样式表顶部定义变量,并在需要时使用变量名,而不是使用十六进制代码。此外,如果我需要改变颜色,那么我必须在一个地方改变,它将通过文件反映出来

我也搜索了,但不知道如何在qt中使用它


谢谢:)

使用纯Qt样式表是不可能实现的

<>你可以通过在C++代码中修改和重新加载样式表来实现类似的效果,例如:

QString myColor = "#FFCC08";
QString styleSheet = "QPushButton { background-color: %1;}";
...
myWidget->setStyleSheet( styleSheet.arg(myColor) );

不幸的是,这有几个缺点(无法在designer中预览,更改代码而不是样式表),但它几乎可以让您尽可能接近Qt的目标。

您可以非常轻松地构建自己的微型Sass:

1.创建包含变量定义的文本文件。使用以下简单格式:

@myColor  = #FFDDEE
@myColor2 = #112233 
@myWidth  = 20px
2.在qss文件中使用变量名:

QPushButton { 
    background-color: @myColor; 
    min-width: @myWidth;
}
3.打开两个文件,对于定义文件中的每个变量,使用定义文件中的值(字符串)更改其在qss文件中的出现。这是一个简单的字符串替换

4.在应用程序中应用预处理的QS

这是最简单的解决办法。您可以在应用程序外部更改定义文件和qss文件,并在不重新编译代码的情况下应用它。

以下是使用的解决方案。首先,安装python绑定:

pip install sass
然后,使用它:

import sys
import sass
app = QApplication(sys.argv)

# Create your sass style sheet (you can also write this in a file and load the file)
style = '''
$bg-dark: #292929;

QPushButton {
color: red;
background-color: $bg-dark;
}
'''.encode('utf-8')

# Compile Sass to CSS
style = sass.compile_string(style).decode()

# And set it to your app
app.setStyleSheet(style)

实现这一点的另一种方法是使用动态属性。这可以让您轻松地为一个对象或一组对象分配多个属性,有点像为一个对象分配css类。

例如,在UI文件中,可以添加一个字符串动态属性“colorStyle”,其值为“myStyle1”

您的样式表如下所示:

QPushButton[colorStyle='myStyle1'] {
    background-color: #FFCC08;
    ... any other style changes...
}

如果你将它设置为全局样式,任何指定“MySytL1”的QPutPutt都会遵循样式表。< /P>是的,我理解,但是上面的方法的问题在于,我们在每个组件的C++代码中指定样式表属性,而不是从.qss文件中读取。谢谢你的时间。谢谢你的时间。我使用相同的逻辑创建了自己的解析器,该解析器将.qss文件中定义的每个自定义变量颜色替换为实际颜色。如果仍然使用Python,为什么不使用内置字符串格式和kwargs,而不是

sass
?例如,
”。。。背景色:{bg_dark}。格式(…,bg_dark='#292929',…)
很好,这对这个特定的答案也适用。但是sass可以做的不仅仅是替换变量,比如mixin、imports、嵌套规则等等。最终,您可以更轻松、更优雅地为复杂的应用程序设计样式。