Qt6 Android平台QML Image无法加载图片问题求助
我在Qt6中卡了一个简单但麻烦的问题好久了:用Android Qt Clang x86_64套件(cmake)新建Qt Quick项目,添加图片时出现异常。把图片放到项目文件夹里,用代码Image{ source = "profilna.png" },构建后应用输出警告:libappuntitled3_x86_64.so: qrc:/untitled3/Main.qml:10:5: QML Image: Cannot open: qrc:/untitled3/profilna.png。桌面MinGW套件能正常运行,Android上却不行。之后我添加了resource.qrc(前缀设为"/img"),把img文件夹里的图片导入进去,问题依旧;加了set(CMAKE_AUTORCC ON)也没用。
相关代码
main.qml
import QtQuick import QtQuick.Window Window { width: 640 height: 480 visible: true title: qsTr("Hello World") Image{ x: 62 y: 39 width: 153 height: 345 source:"qrc:/img/img/profilna.png" } }
CMakeLists.txt
cmake_minimum_required(VERSION 3.16) project(untitled3 VERSION 0.1 LANGUAGES CXX) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTORCC ON) find_package(Qt6 6.4 REQUIRED COMPONENTS Quick) qt_standard_project_setup() qt_add_executable(appuntitled3 main.cpp ) qt_add_qml_module(appuntitled3 URI untitled3 VERSION 1.0 QML_FILES Main.qml ) set_target_properties(appuntitled3 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(appuntitled3 PRIVATE Qt6::Quick ) install(TARGETS appuntitled3 BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
resource.qrc
<RCC> <qresource prefix="/img"> <file>img/profilna.png</file> </qresource> </RCC>
问题原因与解决办法
资源文件未关联到构建目标:你的CMakeLists.txt没把resource.qrc添加到可执行文件或QML模块中,Android平台不会自动识别未关联的资源文件,而桌面平台可能因本地文件路径侥幸读取成功。
- 修复方式:把resource.qrc添加到
qt_add_executable的源文件列表:qt_add_executable(appuntitled3 main.cpp resource.qrc )
或者添加到QML模块的
RESOURCES字段:qt_add_qml_module(appuntitled3 URI untitled3 VERSION 1.0 QML_FILES Main.qml RESOURCES resource.qrc )- 修复方式:把resource.qrc添加到
图片资源路径错误:resource.qrc中前缀是
/img,文件路径是img/profilna.png,最终资源路径应为qrc:/img/profilna.png,你当前写的qrc:/img/img/profilna.png多了一层img/。- 修复方式:将Image的source改为
"qrc:/img/profilna.png"。
- 修复方式:将Image的source改为
Android资源打包验证:可以解压构建生成的APK文件,检查assets或res目录下是否存在目标图片;也可在Qt Creator的Projects视图中,确认Android构建的Deploy步骤包含了资源文件。
内容的提问来源于stack exchange,提问作者Jovan Drazic

