You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.qrc
  • qt_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:50:28