QT 5.4,无法从代码访问资源
QT 5.4, Unable to access Resource from code
我尝试将我的应用程序的样式图像包含到 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 文件格式,我有 none 个,但这可能是一个线索。
总结:
如何从 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>
此问题与给定版本的 QT 与 MSVS2013 不兼容有关。
下载其他版本的QT或visual studio.
解决问题
QResource::registerResource("darkstyle.qrc") 注册资源描述。如果你想像这样动态地使用资源,你需要自己注册编译的资源。 运行 rcc -binary darkstyle.qrc -o darkstyle.rcc 并使用 QResource::registerResource("darkstyle.rcc")
或者,直接将资源编译到您的二进制文件中。这样做,在您的 .qrc 中使用 RESOURCES += darkstyle.qrc,并省略 QResource::registerResource.
我尝试将我的应用程序的样式图像包含到 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 文件格式,我有 none 个,但这可能是一个线索。
总结: 如何从 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>
此问题与给定版本的 QT 与 MSVS2013 不兼容有关。 下载其他版本的QT或visual studio.
解决问题QResource::registerResource("darkstyle.qrc") 注册资源描述。如果你想像这样动态地使用资源,你需要自己注册编译的资源。 运行 rcc -binary darkstyle.qrc -o darkstyle.rcc 并使用 QResource::registerResource("darkstyle.rcc")
或者,直接将资源编译到您的二进制文件中。这样做,在您的 .qrc 中使用 RESOURCES += darkstyle.qrc,并省略 QResource::registerResource.