我的Qt应用程序有一个很大的样式表,包含大量边距,像素和其他直接基于绘制和图形相关的内容。我很乐意将所有这些东西交给设计人员,但是样式表保存在对设计人员来说不方便的.ui文件中。她更愿意看到一个单独的文件并使用她的常用工具进行编辑。如何将Qt样式表移动到外部文件,但将其保存在资源中?
我想要的是将样式表移动到外部.qss文件,将该文件添加到程序资源并将其链接到.ui文件,这样样式表就会自动编译和使用,应用程序不必保留样式表文件并在运行时加载它。
如何实现这一目标?
我的Qt应用程序有一个很大的样式表,包含大量边距,像素和其他直接基于绘制和图形相关的内容。我很乐意将所有这些东西交给设计人员,但是样式表保存在对设计人员来说不方便的.ui文件中。她更愿意看到一个单独的文件并使用她的常用工具进行编辑。如何将Qt样式表移动到外部文件,但将其保存在资源中?
我想要的是将样式表移动到外部.qss文件,将该文件添加到程序资源并将其链接到.ui文件,这样样式表就会自动编译和使用,应用程序不必保留样式表文件并在运行时加载它。
如何实现这一目标?
将所有样式复制到文件中并将其重命名为stylesheet.qss
然后将其作为新资源项目包含在您的qrc
文件中。你可以简单地通过编辑qrc
文件来做到这一点,如果你已经有一个。 Refer documentation关于如何添加新资源。
然后像这样修改您的代码以在运行时读取qss
文件的内容并将样式应用于您的应用程序。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFile file(":/stylesheet.qss");
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
a.setStyleSheet(file.readAll());
file.close();
}
MainWindow w;
w.show();
return a.exec();
}
注意:当你在stylesheet.qss
的变化,你必须编译qrc
文件更改生效。
我从外部文件运行应用程序时设置样式表。另外,对于设计者,我们添加了一个按钮'重新加载样式表'。通过这种方式,设计人员可以修改文件并立即尝试更改。
例如:
QFile styleFile("stylesheet.qss");
styleFile.open(QFile::ReadOnly);
QByteArray bytes = styleFile.readAll();
QApplication *app = (QApplication*)QApplication::instance();
app->setStyleSheet(newStyleSheet);
足够直简单点,谢谢! – 2014-07-15 13:49:48
此资源也非常有用:[https://www.youtube.com/watch?v=sWIQIi4lg58](https://www.youtube.com/watch?v=sWIQIi4lg58) – nono 2015-01-18 10:54:41
不确定为什么,但上面的代码没有为我工作(Qt 5.9.1)。我将QByteString转换为QString,现在一切正常:'QString style(file.readAll()); a.setStyleSheet(风格);' – semanser 2017-09-29 07:57:28