如何将Qt样式表移动到外部文件,但保持它在资源中编译

How to move a Qt stylesheet to an external file but keep it compiled in resources?

本文关键字:编译 资源 文件 Qt 样式 外部 移动      更新时间:2023-10-16

我的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);