以编程方式编辑 QSS 样式表
Editing QSS Stylesheet programmatically
我想要做的是在特定文件夹中有一个 QSS 样式表。我想以编程方式从 GUI 编辑选定的元素。由于 QT 不支持 SaSS 或 LeSS,因此我需要这样做 "manually"。
到目前为止,我所拥有的是读取一个 qss 文件,并且通过一些 if 语句我可以获得放置在 qss 文件中的每个元素的值。
QTextStream in(qssFile);
line = in.readLine();
if(line.startsWith("QDialog"))
{
int start = line.indexOf("{") + 1;
int end = line.indexOf("}", start);
qDebug() << "QDialog" << line.mid(start, end - start); //"background-color: #404040;"
}
我阅读了这一行,如果用户更改了 gui 上的值,我会保存新值。
当然这不是 best/right 解决方案,但我如何才能更好地解决这个问题?
更新 1: 我添加的示例代码可能有效,但看起来像一个 "junk" 代码,每行有 7-8 个 if 语句。我需要的是,如果我可以为样式表中的每个元素设置变量,例如:
QDialog{
background-color: @dialogBackgroundColor;
min-width: @dialogMinWidth;
}
这样我就可以将值设置到临时样式表中并应用它。
对于可以通过 QSS 设置的几个(但远非所有)属性,动态 C++ setter 和 getter 之间存在严重的不对称性。
更糟糕的是,正如您所注意到的,除了刷新整个样式表之外没有合适的方法来编辑活动样式表,这意味着重新加载所有内容。最重要的是,加载后没有简单的编程方式来实际编辑样式表。它是一个结构化字符串,要解析和修改它,您需要求助于您编写的样板代码。
不使用样式表也不是一种选择,因为没有它们就无法设置各种属性。
我想要做的是在特定文件夹中有一个 QSS 样式表。我想以编程方式从 GUI 编辑选定的元素。由于 QT 不支持 SaSS 或 LeSS,因此我需要这样做 "manually"。 到目前为止,我所拥有的是读取一个 qss 文件,并且通过一些 if 语句我可以获得放置在 qss 文件中的每个元素的值。
QTextStream in(qssFile);
line = in.readLine();
if(line.startsWith("QDialog"))
{
int start = line.indexOf("{") + 1;
int end = line.indexOf("}", start);
qDebug() << "QDialog" << line.mid(start, end - start); //"background-color: #404040;"
}
我阅读了这一行,如果用户更改了 gui 上的值,我会保存新值。 当然这不是 best/right 解决方案,但我如何才能更好地解决这个问题?
更新 1: 我添加的示例代码可能有效,但看起来像一个 "junk" 代码,每行有 7-8 个 if 语句。我需要的是,如果我可以为样式表中的每个元素设置变量,例如:
QDialog{
background-color: @dialogBackgroundColor;
min-width: @dialogMinWidth;
}
这样我就可以将值设置到临时样式表中并应用它。
对于可以通过 QSS 设置的几个(但远非所有)属性,动态 C++ setter 和 getter 之间存在严重的不对称性。
更糟糕的是,正如您所注意到的,除了刷新整个样式表之外没有合适的方法来编辑活动样式表,这意味着重新加载所有内容。最重要的是,加载后没有简单的编程方式来实际编辑样式表。它是一个结构化字符串,要解析和修改它,您需要求助于您编写的样板代码。
不使用样式表也不是一种选择,因为没有它们就无法设置各种属性。