Использование файла ресурсов Qt

#c #qt

#c #qt

Вопрос:

Здесь я описываю проблему, с которой я столкнулся с файлом Qt resource .rcc.

во-первых, когда я создал .файл qrc в моем проекте поместит все ресурсы, добавленные в qrc, в исполняемый двоичный файл.

во-вторых, файл rcc в Qt используется для правильного и оптимального использования ресурсов, и когда я создаю его в своем проекте, он по-прежнему включает все ресурсы (добавленные в .qrc-файл) в исполняемый двоичный файл, даже rcc-файл уже содержит все ресурсы итак, мой вопрос в том, зачем использовать этот rcc, даже если ресурсы включены в исполняемый двоичный файл. Зачем включать избыточность в проект??

возможно, я что-то неправильно истолковываю или я не в курсе некоторых моментов, пожалуйста, поправьте меня, если я ошибаюсь.

Ответ №1:

Слишком поздно для ответа, но может быть кому-нибудь поможет.

Я ожидал подобной проблемы и использовал следующее решение: если вы используете QtCreator, просто перенесите ваши РЕСУРСЫ = xxx с условием конфигурации в файл .pro, вот так:

 !realbuild {
    RESOURCES  = xxx.qrc
}
  

и задайте CONFIG =realbuild для параметров qmake. Что это дает? Вы можете редактировать свои формы с помощью конструктора QtCreator и использовать ресурс непосредственно из редактора, но он не будет скомпилирован в ваш целевой файл, ресурсы должны быть загружены во время выполнения с помощью QResource::registerResource(). Пользователи могут создавать ресурсы вручную, используя прямой вызов инструмента rcc, или написать простой скрипт и вызвать его, используя переменную QMAKE_POST_LINK.

Теперь вопрос в том, как перезагрузить ресурсы во время выполнения?…

Ответ №2:

Для ресурсов Qt есть два варианта:

  • включите .qrc в свой .pro файл с
  RESOURCES = myapp.qrc
  
  • создайте внешний двоичный файл ресурсов с помощью rcc , затем зарегистрируйте его во время выполнения с помощью
 QResource::registerResource("/path/to/myresource.rcc");
  

Не делайте и того, и другого. т.е. если ранее вы .qrc непосредственно включали в себя .pro , а теперь хотите включить его динамически, удалите RESOURCES строку из файла проекта и выполните чистую сборку. Внешние двоичные ресурсы не включаются в ваш исполняемый файл, если вы не указали их в RESOURCES настройках вашего проекта.