Каждое серьезное приложение с графическим пользовательским интерфейсом (и не только) использует файлы ресурсов. При этом у вас есть два варианта: либо подключать ресурсы по относительным путям файловой системы, либо поместить их прямо внутрь бинарного файла приложения или библиотеки. У каждого из этих подходов есть свои преимущества и недостатки.
В первом случае (ресурсы - внешние файлы) приложение становится более гибким, поскольку ресурсы можно менять без пересборки, однако пользователи могут случайно (или специально) испортить часть ресурсов, нарушив корректность работы приложения. К тому же, если относительные пути приложения собьются, то файлы ресурсов не будут найдены.
С ресурсами, вшитыми в бинарный файл, ситуация прямо противоположная: приложение становится монолитным, исполняемый файл имеет большой размер, любое изменение требует пересборки, но случайно нарушить его работоспособность (например, подменив изображение) становится практически невозможно.
С учетом всех плюсов и минусов последний вариант в большинстве случаев является предпочтительным. О нем мы и поговорим.
Первым делом создайте файл с описанием тех ресурсов, которые собираетесь использовать. Он имеет следующий вид (назовем его 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, заработало.
Anonymous
Qt 5.10 Static, ошибок при сборке Нет. На мониторе программа нНЕs отображается.