QT 5.4, Невозможно получить доступ к ресурсу из кода
Я пытаюсь включить изображения стилей моего приложения в файл q-ресурса. Когда я включаю файл непосредственно в код, он работает, но когда я пытаюсь использовать QResource, он терпит неудачу (не загружайте файл).
У меня есть файл ресурса в главном каталоге:
AppFolder
|- main.cpp
|- darkstyle.qrc
|- darkstyle
|- WindowTitleBar.png
В следующем примере напечатайте: failed1 failed2
#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_MSbitD3
Я перепробовал большинство возможных комбинаций с путями исполнения.
Примечание 2: Некоторые примеры используют формат файла.rcc, у меня нет ни одного из них, но это может быть подсказкой.
Описание: Как получить доступ к файлу QResource из приложения QT?
РЕДАКТИРОВАТЬ 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>
2 ответа
Проблема связана с несовместимостью данной версии QT с MSVS2013. Проблема решается загрузкой другой версии QT или визуальной студии.
QResource::registerResource("darkstyle.qrc") регистрирует описание ресурса. Если вы хотите использовать ресурсы динамически, вам нужно зарегистрировать скомпилированные ресурсы сами. Запустите rcc -binary darkstyle.qrc -o darkstyle.rcc и используйте QResource::registerResource("darkstyle.rcc")
В качестве альтернативы, скомпилируйте ресурсы в ваш двоичный файл напрямую. Сделайте это, используйте RESOURCES += darkstyle.qrc в вашем.qrc и не используйте QResource::registerResource.