Qt资源文件无需编译即可更新

时间:2013-10-03 02:05:26

标签: c++ qt qtcore

我正在制作一个C ++应用程序,并且我创建了一个将从css文件应用样式表的函数。这是方法:

void MainWindow::load_css_file() {
    QFile styleFile(":/light_style_css");
    styleFile.open(QFile::ReadOnly);

    QString styleSheet = styleFile.readAll();
    setStyleSheet(styleSheet);

};

这很好用,除了每次我对“light_style_css”(这是我项目资源文件中的css文件的别名)进行更改时我需要运行“make”的事实。

但是,当我将方法改为这样的时候:

void MainWindow::load_css_file() {
    QFile styleFile("../stylesheets/light_style.css");
    styleFile.open(QFile::ReadOnly);

    QString styleSheet = styleFile.readAll();
    setStyleSheet(styleSheet);

};

我可以对文件进行更改,程序会更新而无需运行“make”来进行更改。

有没有办法,我可以使用资源系统,而不必运行“make”来进行更改?

这是我的资源档案:

<!DOCTYPE RCC><RCC version="1.0">
 <qresource>
     <file alias="light_style_css">stylesheets/light_style.css</file>
 </qresource>
 </RCC>

2 个答案:

答案 0 :(得分:3)

简单地说:不,你不能。

资源内置于您的可执行文件中。如果要更改它们,则需要重建可执行文件。

您的第二个方法是从磁盘读取文件,因此它没有这种行为。

如果这对您来说是一个真正的问题,可以在命令行中将样式表作为参数传递,并默认为资源。这样,您可以根据需要调试样式表,而无需每次都重新编译。一旦满意就重建(在你发货之前!)。

答案 1 :(得分:2)

我们在项目中执行以下解决方案(由于公司政策,我无法提供代码):

  • 首先,我们构建所有资源以分离二进制.rcc文件。这没有必要,但很有帮助。
  • 其次,在发布版本中,我们总是从Qt资源系统加载资源。
  • 第三,仅在调试版本中:

    1. 我们检查resource文件夹中的main.qss文件。
    2. 如果存在:我们打开它并将所有:/替换为./resource/字符串,然后应用
    3. 如果它不存在:我们按发布版本加载资源。