QML Image: Cannot open - CMake qrc
-
Hello,
I believe I have asked this question under the wrong "General and Desktop" topic last time - https://forum.qt.io/topic/144329/qml-image-cannot-open-cmake-qrcThis should have been the topic under which I should have asked it.
I have learnt a bit of Qt Core and Qt Widgets and worked out a few small projects with them. I am starting to learn QML and most of the tutorials out there (including KDAB in YouTube) show compiling and building using .pro files.
I have Qt 6.5 and Qt Creator 10.0 installed at the moment and I would like to learn it using CMake.I have the same problem as this person here on Stack Overflow - https://stackoverflow.com/questions/71011319/image-not-displaying-qt6-c-cmake
I added an image file to a .qrc resource file and I am trying to display that image. Every time the project runs, I get this message
qrc:/qml_testing/qml/Main.qml:10:5: QML Image: Cannot open: qrc:/images/linux.png
. The QML Debugger Console is empty.CMakeLists.txt file:
cmake_minimum_required(VERSION 3.16) project(qml_testing VERSION 0.1 LANGUAGES CXX) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 6.4 REQUIRED COMPONENTS Quick) qt_standard_project_setup() qt_add_executable(appqml_testing main.cpp qml/resources/resource.qrc ) qt_add_qml_module(appqml_testing URI qml_testing VERSION 1.0 QML_FILES qml/Main.qml ) set_target_properties(appqml_testing PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} MACOSX_BUNDLE TRUE WIN32_EXECUTABLE TRUE ) target_link_libraries(appqml_testing PRIVATE Qt6::Quick ) install(TARGETS appqml_testing BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
main.cpp file:
#include <QGuiApplication> #include <QQmlApplicationEngine> int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; const QUrl url(u"qrc:/qml_testing/qml/Main.qml"_qs); QObject::connect(&engine, &QQmlApplicationEngine::objectCreationFailed, &app, []() { QCoreApplication::exit(-1); }, Qt::QueuedConnection); engine.load(url); return app.exec(); }
Main.qml file:
import QtQuick import QtQuick.Window Window { width: 640 height: 480 visible: true title: qsTr("Hello World") Image { id: image source: "qrc:/images/linux.png" anchors.centerIn: parent } }
P.S - I enabled the QmlDesigner plugin and tried to drag and drop an image on the screen and select the source from the resource. The Designer shows the image on the display, but when the project is run, the screen is empty.
My directory structure looks like this:
Thank you so much in advance.
-
Was facing the same problem too, i found out that i need to add
set(CMAKE_AUTORCC ON)
to the cmake file and it's working now.
Try adding it this may be the answer to your problemEdit : make sure to add this line before the
qt_add_executable(appqml_testing main.cpp qml/resources/resource.qrc )
line
-
@JoeCFD Thank you so much for responding. The build directory does not have the qrc_resources.cpp file that you meant. These are all the cpp files generated after building the project.
Is there something else that I could be doing wrong? The project has successfully included the qrc file to be seen and interacted with on Qt Creator. But after build and run, it is disregarded.
-
Was facing the same problem too, i found out that i need to add
set(CMAKE_AUTORCC ON)
to the cmake file and it's working now.
Try adding it this may be the answer to your problemEdit : make sure to add this line before the
qt_add_executable(appqml_testing main.cpp qml/resources/resource.qrc )
line
-
-
@JohnKS said in QML Image: Cannot open - CMake qrc:
set(CMAKE_AUTORCC ON)
I found that if I add the line "qml/resources/resource.qrc" where you suggest I get a compile error.
I simply added resource.qrc to the modules section like this:
qt_add_qml_module(appBasicElementsDemoImage
URI BasicElementsDemoImage
VERSION 1.0
QML_FILES Main.qml resource.qrcAdding the set(CMAKE_AUTORCC ON) worked just fine.
-
@Colins2 It is maybe also worth noting that in the CMakelists template for a Qt Widgets application, i.e. a C++ app, the set(CMAKE_AUTORCC ON) statement is present by default.
I have now added this to my QtQuick template to avoid future problems. -
This post seem to work for me:
https://doc.qt.io/qt-6/cmake-build-qml-application.html
I didn't need to add
set(CMAKE_AUTORCC ON)
Relevant part of CMakeLists.txt:
qt_add_qml_module(appqmlDemo URI qmlDemo VERSION 1.0 QML_FILES Main.qml RESOURCES images/menu_24px.png )
My project structure:
├── CMakeLists.txt ├── CMakeLists.txt.user ├── images │ └── menu_24px.png ├── main.cpp ├── Main.qml
I used the image in the qml file as:
ToolButton { id: menuButton anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter icon.source: "images/menu_24px.png" onClicked: drawer.open() }
-
@JohnKS Wow, I just spent like an hour trying to figure this out and copying detailed tutorials verbatim to try and get it working and it's this non-default flag that apparently doesn't always need to be set seeing as it doesn't appear anywhere in Qt's examples. It would be really helpful if this was mentioned more prominently somewhere.