【QML】 如何导入QML文档目录

在QML工程中,本地目录中的QML文件可以在不需要附加设置或配置的情况下导入。一个本地目录中可能包含一个目录清单qmldir文件,用于定义提供的类型名,并指定提供给导入目录时可用的JavaScript资源。

本地文件系统上的所有QML文件都可以使用绝对或相对路径的导入,导入时使用:

import "目录名称”

语句来完成。

从而使我们能使用该目录中定义的对象类型。

很多情况下,如果本地目录中包含一个qmldir文件,这些类型将通过qmldir文件中指定的类型名引用;否则,它们将与从QML文档的文件名派生的类型名一起使用。如果目录中没有指定qmldir文件,qml文件将作为公开类型使用。

一个示例

例如以下QML项目目录结构。在顶层目录myapp下,有一个名为mycomponents的子目录中有一组常见的UI组件,而主应用程序代码文件位于名为main的子目录中,如下所示:

【QML】 如何导入QML文档目录_第1张图片

在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–> 重置代码模型,重置更新一下代码模型即可解决。

【QML】 如何导入QML文档目录_第2张图片

你可能感兴趣的:(小生聊【Qml】,qml,qt)