【QML】 如何导入QML文档目录
在QML工程中,本地目录中的QML文件可以在不需要附加设置或配置的情况下导入。一个本地目录中可能包含一个目录清单qmldir
文件,用于定义提供的类型名,并指定提供给导入目录时可用的JavaScript资源。
本地文件系统上的所有QML文件都可以使用绝对或相对路径的导入,导入时使用:
import "目录名称”
语句来完成。
从而使我们能使用该目录中定义的对象类型。
很多情况下,如果本地目录中包含一个qmldir文件,这些类型将通过qmldir文件中指定的类型名引用;否则,它们将与从QML文档的文件名派生的类型名一起使用。如果目录中没有指定qmldir文件,qml文件将作为公开类型使用。
一个示例
例如以下QML项目目录结构。在顶层目录myapp下,有一个名为mycomponents的子目录中有一组常见的UI组件,而主应用程序代码文件位于名为main的子目录中,如下所示:
在main/application.qml文件中可以使用mycomponents目录的相对路径导入mycomponents目录,从而允许在application.qml文件中使用mycomponents目录中定义的QML对象类型,如下代码:
import "../mycomponents"
DialogBox {
CheckBox {
}
Slider {
}
}
因为main和mycomponents是同级目录,上述代码是application.qml
文件中的内容,所以在使用import
导入时,使用的是:../mycomponents
,回到application.qml文件的上一级目录。
当然,我们还可以为导入的目录取一个别名(即本地命名空间),在这种情况下,我们需要使用限定的命名空间名称去使用目录中提供的类型,不能直接使用。例如下列代码:
import "../mycomponents" as MyComponents
MyComponents.DialogBox {
// ...
}
对于应用程序内组件集和应用程序原型,导入本地目录在实际开发中非常方便。但是如果模块目录移动到了另一个位置,所有与导入此模块的代码(与导入相关的语句)都必须更新。如果使用QML模块方式导入,则可以避免出现这种情况,因为该种方式将使用唯一标识符字符串导入已安装的模块,而不是使用文件系统的路径,所以当目录移动了位置,qml文件中与导入相关的代码也不会受到任何影响。以模块方法导入参见这篇文章《如何创建一个QML模块》
『注意』这里
MyComponents
必须是以大写字母开头的命名空间,才能引入正确的类型对象。
备注
在QtCreator中,如果导入语句语法和用法都正常,且能正常启动运行qml程序,但是在代码编辑器中依然会报:**QT Unknown component(M300)**错误。
这是因为QtCreator的代码模型没有重置更新。可按照下列步骤解决:
依次点击:工具
–> QML/JS
–> 重置代码模型
,重置更新一下代码模型即可解决。