如何将Qt样式表移动到外部文件但是将其保存在资源中?

Ale*_*aev 7 c++ qt qtstylesheets

我的Qt应用程序有一个大样式表,有很多边距,像素和其他东西直接基于和绘图和图形相关.我很乐意将所有这些内容提供给设计师,但样式表保存在.ui文件中,这对设计人员来说不方便; 她更喜欢看一个单独的文件并使用她常用的工具进行编辑.

我想要的是将样式表移动到外部.qss文件,将该文件添加到程序资源并将其链接到.ui文件,因此样式表将由窗口小部件自动编译和使用,并且应用程序不会保留样式表文件并在运行时加载它.

怎么实现呢?

war*_*anc 12

将所有样式复制到一个文件中并将其重命名为类似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();
}
Run Code Online (Sandbox Code Playgroud)

注意:在进行更改时stylesheet.qss,必须编译qrc文件才能使更改生效.


Kla*_*azt 5

当应用程序从外部文件运行时,我设置了样式表。此外,对于设计师,我们添加了一个“重新加载样式表”按钮。这样设计者就可以修改文件并立即尝试更改。

例如:

QFile styleFile("stylesheet.qss");
styleFile.open(QFile::ReadOnly);
QByteArray bytes = styleFile.readAll();
QApplication *app = (QApplication*)QApplication::instance();
app->setStyleSheet(newStyleSheet);
Run Code Online (Sandbox Code Playgroud)