Qt/QML应用启动时无法找到main.qml文件的问题排查
问题原因与解决方案
从你提供的自动生成的QRC文件可以明确看到:你的main.qml被打包到了**qrc:/qt/qml/QtQuickTest/main.qml**路径下,而不是你尝试的qrc:/qt/qml/main.qml或qrc:/main.qml,这就是启动时找不到文件的核心原因。
造成这个路径差异的根源是Qt 6的qt_add_qml_module命令默认行为:它会将QML文件以/qt/qml/[你的URI]/作为资源前缀打包,你的URI设置为QtQuickTest,所以路径自然带上了这个后缀。
下面是三种可行的解决方式:
方式一:直接修正资源路径
修改main.cpp中的加载代码,使用正确的资源路径:
engine.load(QUrl(QStringLiteral("qrc:/qt/qml/QtQuickTest/main.qml")));
方式二:利用Qt 6模块化加载(推荐)
在CMakeLists.txt的qt_add_qml_module块中添加MAIN_QML_FILE配置,指定主QML文件:
qt_add_qml_module(appQtQuickTest URI QtQuickTest VERSION 1.0 MAIN_QML_FILE main.qml # 新增此行,标记主QML文件 QML_FILES main.qml RESOURCES Description.md test.json )
然后修改main.cpp的加载代码为模块化加载方式,无需硬编码路径:
engine.loadFromModule("QtQuickTest", "Main");
方式三:自定义资源前缀
如果希望保持你最初预期的qrc:/qt/qml/main.qml路径,可以在qt_add_qml_module中指定自定义资源前缀:
qt_add_qml_module(appQtQuickTest URI QtQuickTest VERSION 1.0 RESOURCE_PREFIX "/qt/qml" # 自定义资源前缀,去掉默认的URI后缀 QML_FILES main.qml RESOURCES Description.md test.json )
此时main.cpp中原来的qrc:/qt/qml/main.qml路径即可正常使用。
内容的提问来源于stack exchange,提问作者Pietro
相关产品推荐
相关产品推荐

