介绍
原生的qss不支持变量,所以,为了方便,本人实现了这个支持变量的qss模块。
使用
▼ 引入头文件
#include <VStyleSheets>
▼ 函数
//函数
static QString toQss(const QString &style, bool simplified = false);
/*
*style: 你的qss
*simplified:返回的qss是精简过的 (去多余的空格,换行)
*/
// 判断 QSS是否有效
static bool isStyleSheetValid(const QString &styleSheet);
//调用
toQss(qss, true);// 解析变量
qDebug() << isStyleSheetValid(qss);// QSS是否有效
变量规则
支持所有的变量类型,如括号表达式,渐变色,十六进制等,支持任意位置声明变量,支持多行,单行等。
// 声明变量
$keyName = values;
//使用变量
QWidget{ color : $yourVar;}
▼ 以下是测试的变量类型匹配。
绿色是合格的变量命名,红色是合格的变量值, 蓝色是必须有的符号,变量以$开头 等号=赋值,分号;结束
举例
原生的QSS:
QPushButton{
color:red;
}
QWidget{
color:red;
}
QLineEdit{
border-color:red;
}
当我们的需求从 red变成green, 我们就要一个个修改,批量修改也容易出现替换失败,用代码实现,replace的匹配操作也是一个麻烦事,(以上描述是我本人为了夸赞 VStyleSheets 的恶意贬低,可忽略)
▼使用VStyleSheets
/*定义变量, 支持注释*/
$color = red;
QPushButton{
color:$color;
}
QWidget{
color:$color;
}
QLineEdit{
border-color:$color;
}
实例
我们有一个需求,一键换色,已经内置好了主色调,氛围色等,我们只需要几个颜色就可以完成整体换色。
QString qss("QWidget{color:$MainColor;}");//...等等 这里是你的QSS模板
//这些颜色可以放在配置文件中
QString test("$MainColor = %1;");
test = test.arg("#f7f0de");// 举例,你还可以加入其他颜色
// 因为支持任意位置声明变量,所以append, insert都可以
QString result = VStyleSheets::toQss(qss.append(test), true);// 最后结果 演示用
setStyleSheet(result);// 应用qss