Файл ресурсов Qt .qrc позволяет разбивать внедренные файлы на разные префиксы
<RCC>
<qresource prefix="/qml">
<file alias="CustomWidget.qml">qml/CustomWidget.qml</file>
</qresource>
<qresource prefix="/icons">
<file alias="home.png">icons/home.png</file>
</qresource>
</RCC>
Я часто вижу разработчиков, переделывающих иерархию файловой системы с префиксами, как в примере выше. Но, на мой взгляд, это точно так же, как это с точки зрения кода вызывающего абонента:
<RCC>
<qresource>
<file>qml/CustomWidget.qml</file>
<file>icons/home.png</file>
</qresource>
</RCC>
В обоих случаях вы можете использовать файл в C ++ с одинаковым синтаксисом :/qml/CustomWidget.qml
,
Есть ли какое-то преимущество в использовании префикса + псевдоним по пути к файловой системе?
Это просто способ отделить идентификаторы ресурсов от реальных объектов файловой системы. После того как вы определили префикс и псевдоним для ссылки на ресурс, даже если файл ресурса изменяется (то есть заменяется другим файлом с другим именем и путем), код остается без изменений.
Допустим, у вас есть хранилище изображений, которые используются многими приложениями, вы можете ссылаться на файлы в QRC как это:
<RCC>
<qresource prefix="/pics">
<file alias="logo">../../../../pictures/logos/logo-001.png</file>
</qresource>
</RCC>
Код в значительной степени не зависит от длинного пути к файлу, на ресурс ссылаются так:
QPixmap pix(":/pics/logo");
Если нужен другой логотип или хранилище было перемещено в другое место, только QRC файл должен быть отредактирован:
<RCC>
<qresource prefix="/pics">
<file alias="logo">../../../new-repo/logos/logo-002.png</file>
</qresource>
</RCC>
Других решений пока нет …