【问题标题】:Qt Resource Files don't update without compilingQt 资源文件在不编译的情况下不会更新
【发布时间】:2013-10-03 02:05:26
【问题描述】:

我正在制作一个 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>

【问题讨论】:

    标签: c++ qt qtcore


    【解决方案1】:

    简单地说:不,你不能。

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我曾经使用过同样的方法,除了使用QFileSystemWatcher 的增强功能,当您在编辑器中保存 qss 文件时,应用程序会立即重新加载它。这带来了巨大的生产力提升。
      • @the_mandrill 我编写了专有工具,有助于即时纠正样式。可以选择像 Spy++ 中的小部件,可视化小部件树/它们的样式和许多其他东西。但正如我提到的 - 我不能分享它:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2012-06-22
      • 2012-07-09
      • 1970-01-01
      • 2012-12-13
      • 2022-01-21
      • 2010-09-07
      相关资源
      最近更新 更多