我的Qt应用程序有一个大型样式表,其中包含许多边距,像素和其他直接基于图形和图形相关的东西。我很乐意将所有这些内容提供给设计师,但样式表保存在.ui文件中,这对设计人员来说不方便;她更喜欢看一个单独的文件并使用她常用的工具进行编辑。
我想要的是将样式表移动到外部.qss文件,将该文件添加到程序资源并将其链接到.ui文件,因此样式表将由窗口小部件自动编译和使用,应用程序将不会不得不保留样式表文件并在运行时加载它。
如何实现?
答案 0 :(得分:12)
将所有样式复制到一个文件中,并将其重命名为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
文件才能使更改生效。
答案 1 :(得分:3)
我从外部文件运行应用程序时设置样式表。此外,对于设计师我们添加了一个“重新加载样式表”的按钮。这样设计人员就可以修改文件并立即尝试更改。
例如:
QFile styleFile("stylesheet.qss");
styleFile.open(QFile::ReadOnly);
QByteArray bytes = styleFile.readAll();
QApplication *app = (QApplication*)QApplication::instance();
app->setStyleSheet(newStyleSheet);