我的 Qt 应用程序有一个大型样式表,其中包含大量边距、像素和其他直接基于绘图和图形并与之相关的内容。我很乐意将所有这些东西都交给设计师,但是样式表保存在 .ui 文件中,这对设计师来说并不方便;她更愿意查看一个单独的文件并使用她常用的工具对其进行编辑。
我想要的是将样式表移动到外部 .qss 文件,将该文件添加到程序资源中并将其链接到 .ui 文件,以便小部件自动编译和使用样式表,并且应用程序不会保留样式表文件并在运行时加载它。
如何做到这一点?
我的 Qt 应用程序有一个大型样式表,其中包含大量边距、像素和其他直接基于绘图和图形并与之相关的内容。我很乐意将所有这些东西都交给设计师,但是样式表保存在 .ui 文件中,这对设计师来说并不方便;她更愿意查看一个单独的文件并使用她常用的工具对其进行编辑。
我想要的是将样式表移动到外部 .qss 文件,将该文件添加到程序资源中并将其链接到 .ui 文件,以便小部件自动编译和使用样式表,并且应用程序不会保留样式表文件并在运行时加载它。
如何做到这一点?
将所有样式复制到文件中并将其重命名为“然后将其作为新资源项stylesheet.qss
包含在文件中”。如果您已经有文件,qrc
您可以简单地通过编辑文件来做到这一点。请参阅有关如何添加新资源的文档。qrc
然后像这样修改您的代码以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);