是否有可能在.qss文件中为hex / rgb编号赋予变量名称。对于呃
myColor = #FFCC08
QPushButton { background-color: myColor;}
这样我就可以在样式表的顶部定义变量,并使用变量名称wheverver required而不是使用十六进制代码。此外,如果我需要更改颜色,那么我必须在一个地方进行更改,它将在文件中反映出来。
我还搜索了Saas,但不知道如何在qt中使用它。
谢谢:)
答案 0 :(得分:13)
你可以很容易地建立自己的小萨斯:
1.创建包含变量定义的文本文件。使用这样的简单格式:
@myColor = #FFDDEE
@myColor2 = #112233
@myWidth = 20px
2.在qss文件中使用变量名称:
QPushButton {
background-color: @myColor;
min-width: @myWidth;
}
3.打开两个文件,并为定义文件中的每个变量更改其在qss文件中的出现,并使用定义文件中的值(字符串)。这是一个简单的字符串替换。
4.在应用程序中应用预处理的qss。
这是最简单的解决方案。您可以在应用程序外部更改定义文件和qss文件,并在不重新编译代码的情况下应用它。
答案 1 :(得分:3)
使用纯Qt样式表无法实现您想要完成的任务。
您可以通过在C ++代码中修改和重新加载样式表来实现类似的效果,例如:
QString myColor = "#FFCC08";
QString styleSheet = "QPushButton { background-color: %1;}";
...
myWidget->setStyleSheet( styleSheet.arg(myColor) );
不幸的是,这有几个缺点(无法在设计师中预览,更改代码而不是样式表),但它与您尝试使用Qt实现的目标非常接近。
答案 2 :(得分:1)
以下是使用sass的解决方案。首先,安装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)
答案 3 :(得分:0)
完成此操作的另一种方法是使用动态属性。这将使您轻松地将多个属性分配给一个对象或一组对象,就像将css类分配给一个对象一样。 https://wiki.qt.io/Dynamic_Properties_and_Stylesheets
例如,在您的UI文件中,您可以添加值为“ myStyle1”的字符串动态属性“ colorStyle”。
您的样式表如下:
QPushButton[colorStyle='myStyle1'] {
background-color: #FFCC08;
... any other style changes...
}
如果您全局设置了QqushButton,则为它分配的“ myStyle1”将遵循样式表。