【问题标题】:QT 5.4, Unable to access Resource from codeQT 5.4,无法从代码访问资源
【发布时间】:2015-03-16 09:16:43
【问题描述】:

我尝试将我的应用的样式图像包含到一个 q-resource 文件中。 当我将文件直接包含在代码中时,它可以工作,但是当我尝试使用 QResource 时,它​​会失败(不加载文件)。

我在主目录下有资源文件:

AppFolder
  |- main.cpp
  |- darkstyle.qrc
  |- darkstyle
       |- WindowTitleBar.png

以下示例打印: 失败1 失败2

#include <QApplication>
#include <QResource>
#include <Qfile>
#include <QDebug>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    bool ok= QResource::registerResource("darkstyle.qrc");
    if (!ok) qDebug()<<"failed1";

    QFile file(":/darkstyle/WindowTitleBar.png");
    //QFile file("../AppFolder/darkstyle/WindowTitleBar.png"); //that work

    if(!file.open(QFile::ReadOnly | QFile::Text)) qDebug()<<"failed2";
    else file.close();

    //return a.exec();
    return 0;
}

注意:Qt 创建者默认在顶层文件夹中创建二进制文件 (.exe):../build-AppFolder_Qt_5_4_1_MSVC2013_64bit-Debug/debug/AppFolder.exe 执行根路径似乎是:../build-AppFolder_Qt_5_4_1_MSVC2013_64bit-Debug

我尝试了大多数可能的执行路径组合。

注意2:一些示例使用 .rcc 文件格式,我没有这些,但这可能是一个线索。

总结: 如何从 QT 应用程序内部访问 QResource 文件?

编辑 1:qrc 文件的内容:

<RCC>
    <qresource prefix="/">
        <file>darkstyle/WindowTitleBar.png</file>
        <file>darkstyle/WindowTitleButton.png</file>
        <file>darkstyle/WindowTitleButton1.png</file>
        <file>darkstyle/WindowTitleButton2.png</file>
        <file>darkstyle/WindowTitleButton3.png</file>
    </qresource>
</RCC>

【问题讨论】:

  • darkstyle.qrc的内容是什么?
  • 我在问题文本(EDIT 1 section)中添加了.qrc文件的内容
  • 你有没有尝试调用 Q_INIT_RESOURCE(resources) 或者在路径中添加 qrc://? doc.qt.io/qt-5/resources.html
  • 如果您取消注释您的工作解决方案并将其更改为QFile file("darkstyle/WindowTitleBar.png");,它会起作用吗?在我看来,问题不在于资源文件,而在于工作目录。
  • @GreenScape: 不,正如我所说,工作目录是 ../build.... 但我尝试使用绝对/相对正确路径设置 .qrc 文件:项目文件夹、exec 文件夹和顶层文件夹。

标签: c++ qt qresource


【解决方案1】:

QResource::registerResource("darkstyle.qrc") 注册资源描述。如果你想像这样动态地使用资源,你需要自己注册编译的资源。运行 rcc -binary darkstyle.qrc -o darkstyle.rcc 并使用 QResource::registerResource("darkstyle.rcc")

或者,直接将资源编译到您的二进制文件中。这样做,在您的 .qrc 中使用 RESOURCES += darkstyle.qrc,并省略 QResource::registerResource。

【讨论】:

    【解决方案2】:

    问题与给定版本的 QT 与 MSVS2013 不兼容有关。 通过下载其他版本的QT或visual studio解决问题。

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 2012-12-20
      相关资源
      最近更新 更多