En Qt6 modern amb CMake ja NO es recomana fer servir fitxers .qrc.

Evolució històrica:

Qt5 i anteriors:

Qt6 modern (6.2+):

Comparació:

Antic (Qt5 / .qrc):

<!-- recursos.qrc -->
<RCC>
    <qresource prefix="/">
        <file alias="img/logo.png">jb_logo.png</file>
    </qresource>
</RCC>

Modern (Qt6 / CMake):

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
)

Avantatges del mètode modern:

  1. Tot en un lloc: configuració al CMakeLists.txt
  2. Més clar: no cal XML extra
  3. Millor integració: amb el sistema de mòduls QML de Qt6
  4. Més flexible: pots gestionar prefixos i alias directament

Exemples complets de gestió de recursos en Qt6 modern:

1. Exemple bàsic amb estructura de directoris

projecte/
├── CMakeLists.txt
├── main.cpp
├── Main.qml
├── images/
│   ├── logo.png
│   ├── background.jpg
│   └── icons/
│       ├── home.svg
│       └── settings.svg
└── fonts/
    └── Roboto-Regular.ttf

CMakeLists.txt:

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)

Ús al QML:

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"
    }
}

2. Exemple amb ALIAS (reanomenar fitxers)

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>

3. Exemple amb múltiples directoris externs

projecte/
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   └── qml/
│       └── Main.qml
└── assets/
    ├── shared/
    │   ├── logo.png
    │   └── header.png
    └── platform/
        ├── android/
        │   └── splash.png
        └── desktop/
            └── splash.png

CMakeLists.txt avançat:

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)

4. Exemple complet amb BASE (mantenir estructura)

# 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" }

5. Exemple amb recursos dins del mòdul QML

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.

Resum de conceptes clau: