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.

Другие вопросы по тегам