2

I am making a C++ application, and I created a function that will apply a stylesheet from a css file. This is the method:

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

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

};

This works fine, except for the fact that I need to run "make" every time I make a change to "light_style_css" (which is an alias for a css file in my project resource file).

But, when I change the method to something like this:

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

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

};

I can make changes to the file, and the program updates without having to run "make" for the changes to take place.

Is there a way, that I can use the resource system, without having to run "make" for the changes to take place?

This is my resource file:

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

2 回答 2

3

简单地说:不,你不能。

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

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

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

于 2013-10-03T04:00:45.653 回答
2

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

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

    1. 我们检查resource文件夹中的main.qss文件。
    2. 如果存在:我们打开它并:/./resource/字符串替换所有内容,然后应用它
    3. 如果它不存在:我们在发布版本中加载资源。
于 2013-10-03T08:46:20.593 回答