问题 在qt StyleSheets中使用变量


是否有可能在.qss文件中为hex / rgb数字赋予变量名称。对呃

myColor = #FFCC08
QPushButton { background-color: myColor;}

这样我就可以在样式表的顶部定义变量,并使用变量名称wheverver,而不是使用十六进制代码。此外,如果我需要更改颜色,那么我必须在一个地方更改,它将反映在文件中。

我也搜索过 萨斯 但不知道如何在qt中使用它。

谢谢 :)


10701
2018-06-05 13:39


起源



答案:


你可以很容易地建立自己的小Sass:

1.创建一个包含变量定义的文本文件。使用这样的简单格式:

@myColor  = #FFDDEE
@myColor2 = #112233 
@myWidth  = 20px

2.在qss文件中使用变量名称:

QPushButton { 
    background-color: @myColor; 
    min-width: @myWidth;
}

3.打开定义文件中的两个文件和每个变量,使用定义文件中的值(字符串)更改其在qss文件中的出现。这是一个简单的字符串替换。

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

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


11
2018-06-14 11:19



谢谢你的时间。我使用相同的逻辑来创建我自己的解析器,用自己的实际颜色替换.qss文件中定义的每个自定义变量颜色。 - SAM


答案:


你可以很容易地建立自己的小Sass:

1.创建一个包含变量定义的文本文件。使用这样的简单格式:

@myColor  = #FFDDEE
@myColor2 = #112233 
@myWidth  = 20px

2.在qss文件中使用变量名称:

QPushButton { 
    background-color: @myColor; 
    min-width: @myWidth;
}

3.打开定义文件中的两个文件和每个变量,使用定义文件中的值(字符串)更改其在qss文件中的出现。这是一个简单的字符串替换。

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

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


11
2018-06-14 11:19



谢谢你的时间。我使用相同的逻辑来创建我自己的解析器,用自己的实际颜色替换.qss文件中定义的每个自定义变量颜色。 - SAM


使用纯Qt样式表无法实现您想要完成的任务。

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

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

不幸的是,这有几个缺点(无法在设计师中预览,更改代码而不是样式表),但它与您尝试使用Qt实现的目标非常接近。


3
2018-06-05 14:13



是的我理解,但上述方法的问题是我们在每个组件的c ++代码中指定样式表属性而不是从.qss文件中读取。谢谢你的时间。 - SAM


这是一个使用的解决方案 上海社会科学院。首先,安装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)

0
2018-03-19 09:21



如果你正在使用Python,为什么不使用内置的字符串格式,而不是使用kwargs sass?例如。 '... background-color: {bg_dark}; ...'.format(..., bg_dark='#292929', ...) - Dennis
好的一点,这也适用于这个特定的答案。但是,sass可以做的不仅仅是替换变量,如mixins,import,嵌套规则等。最后,您可以更轻松,更优雅地设置复杂应用程序的样式。 - Overdrivr