介绍
原生的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
实际应用效果

