Sempre usa qrc:/ per accedir a imatges encastades a l'executable.
qrc:/ → només funciona durant el desenvolupamentqrc:/ → funciona sempre, fins i tot quan distribueixes l'aplicacióEstructura del projecte:
projecte/
├── CMakeLists.txt
├── main.cpp
├── Main.qml
└── jb_logo.png
cmake_minimum_required(VERSION 3.16)
project(minRecursos 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(appminRecursos main.cpp)
qt_add_qml_module(appminRecursos
URI exempleRecursos00
QML_FILES Main.qml
)
# Afegir els recursos (imatges, fonts, etc.)
qt_add_resources(appminRecursos "resources"
PREFIX "/"
FILES
jb_logo.png
)
target_link_libraries(appminRecursos PRIVATE Qt6::Quick)
import QtQuick
Window {
visible: true
width: 400
height: 300
title: "Exemple Recursos"
Image {
source: "qrc:/jb_logo.png" // ← Sempre amb qrc:/
anchors.centerIn: parent
fillMode: Image.PreserveAspectFit
}
}
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QObject::connect(
&engine,
&QQmlApplicationEngine::objectCreationFailed,
&app,
[]() { QCoreApplication::exit(-1); },
Qt::QueuedConnection);
engine.loadFromModule("exempleRecursos00", "Main");
return app.exec();
}
source: "jb_logo.png" (sense qrc:/)Image { source: "jb_logo.png" } // ❌ NO funciona en executable distribuït
Problema: Busca el fitxer al sistema de fitxers, no dins de l'executable.
Solució:
Image { source: "qrc:/jb_logo.png" } // ✅ Sempre funciona
Causes:
CMakeLists.txt dins de qt_add_resourcesSolució: Verifica que la imatge estigui declarada al CMakeLists.txt i fes rebuild.
Estructura:
projecte/
├── CMakeLists.txt
├── Main.qml
└── images/
├── logo.png
└── background.jpg
CMakeLists.txt:
qt_add_resources(appminRecursos "imatges"
PREFIX "/img"
BASE "images"
FILES
images/logo.png
images/background.jpg
)
Main.qml:
Image { source: "qrc:/img/logo.png" }
Image { source: "qrc:/img/background.jpg" }
# Compila
cd build/
cmake --build .
# Copia l'executable a un altre lloc
cp appminRecursos /tmp/
# Executa des d'allà
cd /tmp/
./appminRecursos
# Si la imatge es veu → ✅ Tot correcte!
Image {
source: "qrc:/jb_logo.png"
onStatusChanged: {
if (status === Image.Ready) {
console.log("✅ Imatge carregada")
} else if (status === Image.Error) {
console.error("❌ Error:", source)
}
}
}
CMakeLists.txt dins de qt_add_resourcesqrc:/ sempre al codi QMLPATH al QML = PREFIX + nom del fitxer
PREFIX "/" i fitxer logo.png → qrc:/logo.pngPREFIX "/img" i fitxer logo.png → qrc:/img/logo.png