IT Notes

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

Введение

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

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

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

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

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

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

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

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

Индивидуалка Виктория (24 лет) т.8 915 117-08-23 Москва, метро Новокосино. демо 1с унф.

В тег <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, заработало.