Qt6 + CMake项目资源文件找不到问题求助
Qt6 + CMake 资源文件无法访问问题解决
问题背景
使用Qt6和CMake开发项目,已添加resource.qrc资源文件,但运行时无法读取资源中的图片,报错提示无法打开目标图片路径。
当前CMake配置
cmake_minimum_required(VERSION 3.16) project(bounce_ball VERSION 0.1 LANGUAGES CXX) set(CMAKE_AUTOMOC ON) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTORCC ON) find_package(Qt6 6.2 REQUIRED COMPONENTS Quick) qt_add_executable(appbounce_ball main.cpp resource.qrc ) qt_add_qml_module(appbounce_ball URI bounce_ball VERSION 1.0 QML_FILES Main.qml resource.qrc RESOURCES resource.qrc ) set_target_properties(appbounce_ball PROPERTIES WIN32_EXECUTABLE TRUE ) target_link_libraries(appbounce_ball PRIVATE Qt6::Quick ) include(GNUInstallDirs) install(TARGETS appbounce_ball BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
报错信息
Error - qrc:/qt_resource/Main.qml:9:5: QML Image: Cannot open: qrc:/qt_resource/images/soccerball.png
解决步骤
1. 移除重复的资源文件配置
当前CMake存在三处错误配置:
qt_add_executable中冗余添加resource.qrcqt_add_qml_module的QML_FILES字段错误包含resource.qrc(该字段仅用于指定QML文件)qt_add_qml_module的RESOURCES字段重复添加resource.qrc
重复添加会导致资源路径混乱,修改后的CMake配置如下:
cmake_minimum_required(VERSION 3.16) project(bounce_ball VERSION 0.1 LANGUAGES CXX) set(CMAKE_AUTOMOC ON) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTORCC ON) find_package(Qt6 6.2 REQUIRED COMPONENTS Quick) qt_add_executable(appbounce_ball main.cpp ) qt_add_qml_module(appbounce_ball URI bounce_ball VERSION 1.0 QML_FILES Main.qml RESOURCES resource.qrc # 仅保留此处的资源文件配置 ) set_target_properties(appbounce_ball PROPERTIES WIN32_EXECUTABLE TRUE ) target_link_libraries(appbounce_ball PRIVATE Qt6::Quick ) include(GNUInstallDirs) install(TARGETS appbounce_ball BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
2. 检查resource.qrc的路径配置
确保resource.qrc中正确声明图片路径,示例如下:
<RCC> <qresource prefix="/"> <file>images/soccerball.png</file> </qresource> </RCC>
- 若
prefix="/",资源挂载到根路径,QML引用路径应为qrc:/images/soccerball.png - 若将
prefix设为/bounce_ball(与模块URI一致),引用路径则为qrc:/bounce_ball/images/soccerball.png
3. 修正QML中的资源引用路径
根据resource.qrc的配置,调整Main.qml中Image组件的source路径:
Image { source: "qrc:/images/soccerball.png" // 对应qrc中的prefix="/" // 或 source: "qrc:/bounce_ball/images/soccerball.png"(若prefix设为/bounce_ball) }
4. 清理并重新构建项目
删除旧build目录,重新执行CMake配置与构建,避免缓存文件干扰:
rm -rf build mkdir build && cd build cmake .. make # 或根据使用的构建工具执行ninja、Visual Studio构建命令
内容的提问来源于stack exchange,提问作者Aman Kashyap
相关产品推荐
相关产品推荐

