如何通过qmldir与QML模块正确实现无引号导入自定义QML元素?
解决QML自定义模块
import MyModule 1.0导入失败问题 问题原因
使用带引号的相对路径import "MyModule"能正常导入,是因为QML引擎从当前QML文件所在的资源根目录(qrc:/)直接查找子目录;而import MyModule 1.0属于模块式导入,要求引擎在已注册的导入路径下找到包含qmldir的MyModule目录,当前配置未正确设置导入路径,导致引擎无法定位模块。
修复步骤
1. 修正main.cpp的导入路径设置
当前代码中engine.addImportPath("qrc:/Ui");是无效路径,需要将资源根目录添加到导入路径中,让引擎能找到MyModule目录:
// 替换原来的addImportPath行 engine.addImportPath("qrc:/");
2. 确认资源文件结构(qml.qrc)
保持现有文件结构不变,确保MyModule目录下的文件都被正确打包到资源根路径下,你的qml.qrc配置已经符合要求:
<RCC> <qresource prefix="/"> <file>main.qml</file> <file>MyModule/RedRectangle.qml</file> <file>MyModule/qmldir</file> </qresource> </RCC>
3. 确认qmldir格式正确性
你的qmldir配置完全正确,无需修改:
Module MyModule RedRectangle 1.0 RedRectangle.qml
验证修改
修改后重新编译运行,import MyModule 1.0即可正常导入RedRectangle元素,且在任意目录的QML文件中都能使用该模块导入方式。
内容的提问来源于stack exchange,提问作者Евгений Дружинин
相关产品推荐
相关产品推荐

