IT Notes

Файлы ресурсов в Qt

Введение

Каждое серьезное приложение с графическим пользовательским интерфейсом (и не только) использует файлы ресурсов. При этом у вас есть два варианта: либо подключать ресурсы по относительным путям файловой системы, либо поместить их прямо внутрь бинарного файла приложения или библиотеки. У каждого из этих подходов есть свои преимущества и недостатки.

В первом случае (ресурсы - внешние файлы) приложение становится более гибким, поскольку ресурсы можно менять без пересборки, однако пользователи могут случайно (или специально) испортить часть ресурсов, нарушив корректность работы приложения. К тому же, если относительные пути приложения собьются, то файлы ресурсов не будут найдены.

С ресурсами, вшитыми в бинарный файл, ситуация прямо противоположная: приложение становится монолитным, исполняемый файл имеет большой размер, любое изменение требует пересборки, но случайно нарушить его работоспособность (например, подменив изображение) становится практически невозможно.

банкетка на кухню со спинкой. консультация эндокринолога при диабете ставрополь.

С учетом всех плюсов и минусов последний вариант в большинстве случаев является предпочтительным. О нем мы и поговорим.

Создание файла с описанием ресурсов

Первым делом создайте файл с описанием тех ресурсов, которые собираетесь использовать. Он имеет следующий вид (назовем его res.qrc):

<RCC>
    <qresource prefix="/images">
        <file>logo.png</file>
    </qresource>
</RCC>

В приведенном примере мы определили один префикс: /images. Его можно считать логическим каталогом ресурсов. Таких префиксов может быть сколько угодно. Например, если в вашем приложении есть звуковые эффекты, то вы можете добавить префикс /sounds. Для создания более глубокой иерархии используйте префиксы вида /some/long/prefix.

стрижки мужские.

В тег <qresource> вложены определения файлов, относящихся к соответствующему префиксу. В примере включено единственное изображение logo.png, но вы можете указать столько файлов, сколько необходимо. Используйте относительные пути к файлам, беря в качестве каталога отсчета - тот, в котором находится qrc-файл.

Имеет смысл явным образом распределять ресурсы по подкаталогам в файловой системе проекта. Например, изображение logo.png поместите в images/. Тогда запись приобретает вид:

<RCC>
    <qresource prefix="/">
        <file>images/logo.png</file>
    </qresource>
</RCC>

В этом случае логический путь к файлу logo.png вновь имеет вид: /images/logo.png.

Для краткости можно использовать псевдонимы следующим образом:

<RCC>
    <qresource prefix="/myprefix">
        <file alias="logo.png">long/relative/path/to/logo.png</file>
    </qresource>
</RCC>

Файл доступен по логическому пути /myprefix/logo.png.

семена семяныч.

Затем нужно привязать заполненный qrc-файл к проекту. Для этого добавьте в ваш pro-файл строку вида:

RESOURCES += res.qrc

В примере выше qrc-файл расположен на одном уровне с pro-файлом. Если вы применяете более сложную схему размещения файлов, то воспользуйтесь относительным путем.

Обратите внимание, что в QtCreator предусмотрен довольно удобный GUI-интерфейс для работы с файлами ресурсов. Чтобы создать новый qrc-файл, щелкните в контекстном меню для нужного проекта на пункт Add New…. В появившемся диалоговом окне перейдите в группу Qt и выберите Qt Resource file. После успешного создания файла ресурсов в панели проекта вы увидите новую группу Resources, появившуюся рядом с Headers и Sources. Открыв qrc-файл вы попадете в редактор ресурсов, который вполне интуитивно позволяет выполнить те же самые действия, которые мы выполняли вручную.

Использование ресурсов в приложении

Итак, qrc-файл готов и подключен к проекту. Осталось только воспользоваться преимуществами от его использования. И сделать это совсем не сложно:

#include <QApplication>

#include <QLabel>

int main( int argc, char* argv[] ) {
    QApplication a( argc, argv );
    QLabel lbl;
    QPixmap pix( ":/images/logo.png" );
    lbl.setPixmap( pix );
    lbl.resize( pix.size() );
    lbl.show();

    return a.exec();
}

Ключевым здесь является способ обращения к изображению (или любому другому файлу) из ресурсов. Путь строится следующим образом: сначала ставится двоеточие :, затем префикс /images, который мы сами выбрали, и наконец путь к файлу (или псевдоним) logo.png. В остальном все то же самое, что и при работе с обычными файлами, предназначенными только для чтения.

Заключение

Использовать файлы ресурсов в Qt-проектах очень просто, поэтому если вам понадобилось добавить изображения, музыку или что-то еще в свое приложение, то теперь вы знаете, что нужно делать.

Похожие публикации

Комментарии

Qt 5.10 Static, ошибок при сборке Нет. На мониторе программа нНЕs отображается.

Qt 5.10 Static, заработало.