17

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

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

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

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

谢谢 :)

4

4 回答 4

19

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

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

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

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

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

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

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

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

于 2012-06-14T11:19:39.980 回答
5

使用纯 Qt 样式表根本不可能完成您想要完成的工作。

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

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

不幸的是,这有几个缺点(无法在设计器中预览、更改代码而不是样式表),但它与您使用 Qt 实现的目标差不多。

于 2012-06-05T14:13:35.683 回答
1

实现此目的的另一种方法是使用动态属性。这将使您可以轻松地将多个属性分配给一个对象或一组对象,有点像将一个 CSS 类分配给一个对象。 https://wiki.qt.io/Dynamic_Properties_and_Stylesheets

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

在此处输入图像描述

您的样式表如下所示:

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

如果您全局设置它,您分配的任何 QPushButton 'myStyle1' 都将遵循样式表。

于 2020-04-21T21:16:27.157 回答
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)
于 2018-03-19T09:21:25.757 回答