En Qt6 modern amb CMake ja NO es recomana fer servir fitxers .qrc.
Qt5 i anteriors:
.qrc (XML) per definir recursosQt6 modern (6.2+):
qt_add_resources directament al CMakeLists.txtqt_add_qml_module amb la paraula clau RESOURCES.qrc encara funcionen per compatibilitat, però estan deprecated<!-- recursos.qrc -->
<RCC>
<qresource prefix="/">
<file alias="img/logo.png">jb_logo.png</file>
</qresource>
</RCC>
qt_add_resources(appta08_03 "images"
PREFIX "/"
FILES
jb_logo.png
)
O dins del mòdul QML:
qt_add_qml_module(appta08_03
URI ta08_03
QML_FILES Main.qml
RESOURCES
jb_logo.png
)
Exemples complets de gestió de recursos en Qt6 modern:
projecte/
├── CMakeLists.txt
├── main.cpp
├── Main.qml
├── images/
│ ├── logo.png
│ ├── background.jpg
│ └── icons/
│ ├── home.svg
│ └── settings.svg
└── fonts/
└── Roboto-Regular.ttf
cmake_minimum_required(VERSION 3.16)
project(exempleRecursos VERSION 0.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 REQUIRED COMPONENTS Quick)
qt_standard_project_setup(REQUIRES 6.8)
qt_add_executable(appexempleRecursos
main.cpp
)
qt_add_qml_module(appexempleRecursos
URI exempleRecursos
QML_FILES Main.qml
)
# Recursos d'imatges amb prefix personalitzat
qt_add_resources(appexempleRecursos "imatges"
PREFIX "/assets"
BASE "images"
FILES
images/logo.png
images/background.jpg
images/icons/home.svg
images/icons/settings.svg
)
# Recursos de fonts amb un altre prefix
qt_add_resources(appexempleRecursos "fonts"
PREFIX "/fonts"
FILES
fonts/Roboto-Regular.ttf
)
target_link_libraries(appexempleRecursos PRIVATE Qt6::Quick)
import QtQuick
Window {
width: 640
height: 480
visible: true
Image {
source: "qrc:/assets/logo.png" // PREFIX + nom del fitxer
}
Image {
source: "qrc:/assets/icons/home.svg" // BASE preserva l'estructura
}
FontLoader {
source: "qrc:/fonts/Roboto-Regular.ttf"
}
}
Si realment cal fer servir alias específics, encara es pot fer servir un QRC:
# Si necessites alias molt específics, el .qrc encara és útil
qt_add_resources(appexempleRecursos "custom_aliases"
"recursos.qrc"
)
recursos.qrc:
<RCC>
<qresource prefix="/img">
<file alias="logo.png">images/very_long_descriptive_name_logo.png</file>
<file alias="bg.jpg">images/company_background_2024_final_v3.jpg</file>
</qresource>
</RCC>
projecte/
├── CMakeLists.txt
├── src/
│ ├── main.cpp
│ └── qml/
│ └── Main.qml
└── assets/
├── shared/
│ ├── logo.png
│ └── header.png
└── platform/
├── android/
│ └── splash.png
└── desktop/
└── splash.png
cmake_minimum_required(VERSION 3.16)
project(multiRecursos VERSION 0.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 REQUIRED COMPONENTS Quick)
qt_standard_project_setup(REQUIRES 6.8)
qt_add_executable(appmultiRecursos
src/main.cpp
)
qt_add_qml_module(appmultiRecursos
URI multiRecursos
QML_FILES src/qml/Main.qml
)
# Recursos compartits (sempre disponibles)
qt_add_resources(appmultiRecursos "shared"
PREFIX "/shared"
BASE "${CMAKE_SOURCE_DIR}/assets/shared"
FILES
assets/shared/logo.png
assets/shared/header.png
)
# Recursos específics de plataforma
if(ANDROID)
qt_add_resources(appmultiRecursos "platform"
PREFIX "/platform"
FILES
assets/platform/android/splash.png
)
else()
qt_add_resources(appmultiRecursos "platform"
PREFIX "/platform"
FILES
assets/platform/desktop/splash.png
)
endif()
target_link_libraries(appmultiRecursos PRIVATE Qt6::Quick)
# BASE manté l'estructura de directoris relativa
qt_add_resources(appexempleRecursos "temes"
PREFIX "/temes"
BASE "${CMAKE_SOURCE_DIR}/assets/themes"
FILES
assets/themes/dark/colors.qml
assets/themes/dark/images/button.png
assets/themes/light/colors.qml
assets/themes/light/images/button.png
)
Resultat al QML:
// L'estructura es manté gràcies a BASE
Image { source: "qrc:/temes/dark/images/button.png" }
Image { source: "qrc:/temes/light/images/button.png" }
qt_add_qml_module(appexempleRecursos
URI exempleRecursos
VERSION 1.0
QML_FILES
Main.qml
components/Button.qml
components/Header.qml
RESOURCES
images/logo.png
images/icon.svg
RESOURCE_PREFIX "/exempleRecursos" # Prefix automàtic del mòdul
)
Ús al QML del mateix mòdul:
// Automàticament accessible amb el prefix del mòdul
Image { source: "qrc:/qt/qml/exempleRecursos/images/logo.png" }
// O millor, afegir RESOURCE_PREFIX "/" al CMakeLists.txt i usar qrc:/images/logo.png.
qrc:/PREFIX/...)