九、QML——import
-
第一部分先了解
qmldir
文件如何定义,以及各部分含义。 -
第二部分再总结关于
import
语句(其实就是告诉引擎QML文档中能够使用哪些模块
、JavaScript资源
和组件目录
)。接下来会讲解这三种类型的导入,每种导入类型的语法略有不同,适用于不同导入类型的语义也不同。
1 Moudle模块的定义
1.1 手动编写qmldir文件
模块是由一个名为 qmldir
的文件指定的,我们可以打开QT中模块所在的文件夹看看,每个模块都对应一个 qmldir
文件。
我们在 /assets/Qt6/qml_09_import/ 下创建一个 qmldir
文件。
基本内容格式如下:
-
module <ModuleIdentifier>
:module
关键字,后接模块标识符,每个qmldir文件只能有一个标识符。 -
linktarget <libname>
:CMake编译的时候需要链接该组件,该组件库名称就是<libname>
-
[optional] plugin <Name> [<Path>]
:-
[optional]
: 表示该插件本身不包含任何相关代码,仅仅用于加载其他链接的库。 -
<Name>
: 是插件库的名称。具体完整名称跟系统有关。例如,库 MyAppTypes 在 Linux 上会生成 libMyAppTypes.so,而在 Windows 上会生成 MyAppTypes.dll。 -
<Path>(可选)
:指定一个包含插件文件的目录的绝对路径,或一个从包含 qmldir 文件的目录到包含插件文件的目录的相对路径。
-
-
classname <C++ plugin class>
:提供模块使用的 C++ 插件的类名。对于所有依赖于 C++ 插件以实现附加功能的 QML 模块,此信息是必需的。使用静态链接构建的 Qt Quick 应用程序在没有此信息的情况下无法解析模块导入。 -
import <ModuleIdentifier> [<Version>]
:声明会导入另外模块 -
depends <ModuleIdentifier> [<InitialVersion>]
:表示依赖其他模块,也就会导入其他模块。 -
typeinfo <File>
: 声明一个类型描述文件,用于模块,可以被 QML 工具(如 Qt Creator)读取,以访问模块插件定义的类型信息。 -
[singleton] <TypeName> <InitialVersion> <File>
: singleton用来声明一个单例类型,它是可省略的。TypeName是类型名称。InitialVersion用来指定版本号。File是QML类型对应文件所在的位置。
这是手动编写最基本的qmldir文件如下:
1.2 使用 qt_add_qml_module
自动生成
具体可以参考QML——第二十六节:制作扩展插件
官方提供的模块qmldir
文件分析:
模块中相应的***.qmltypes
文件分析:
2 Module模块导入
最常见的导入类型就是模块导入。如果最后使用 as
就是把模块注册到给定的命名空间中,如果没有使用 as
就是全局都可以直接使用模块内包含的组件。
import <ModuleIdentifier> <Version.Number> [as <Qualifier>]
-
<ModuleIdentifier>
:模块的名称,必须以大写字母开头。 -
<Version.Number>
:模块的版本号,Qt6中如果没有指定版本号,默认使用最高版本的模块。 -
<Qualifier>
:是一个可选的局部命名空间标识符,模块提供的对象类型和JavaScript资源将被安装到其中。如果省略,则模块提供的对象类型和JavaScript资源将安装到全局命名空间中。
示例:
/* 这个导入允许使用QtQuick模块提供的所有类型,而不需要指定限定符。 */
import QtQuick 2.0
Rectangle {
width: 200
height: 100
color: "red"
}
/* 其实该种情况可以解决比如 A 和 B 模块都有 Rectangle 的情况(也就是命名空间的作用) */
import QtQuick 2.0 as Quick
Quick.Rectangle {
width: 200
height: 100
color: "red"
}
2.1 自定义模块如何导入
方式一:import “目录(路径)”
方式二:添加路径到环境变量
-
在代码中,调用
QQmlEngine::addImportPath()
方法添加路径。 -
使用 QML2_IMPORT_PATH 环境变量来指定模块所在路径,注意QML后面有个2。
在windows系统中,计算机 - 系统属性 - 高级系统属性 - 环境变量
-
在Qt Design Studio项目中,可以在
***.qmlproject
添加目录到importPaths
列表中。会检索添加目录下面的所有目录中的
qmldir
文件。
2.2 路径(目录)导入
2.2.1 本地目录导入
本地文件系统上的任何QML文件都可以使用import语句导入本地目录,该语句引用目录的绝对或相对文件系统路径,从而使文件能够使用在该目录中定义的对象类型。
自定义的组件必须以大写字母开头2.2.2 远程目录导入
import "http://www.my-example-server.com/myapp/mycomponents"
DialogBox {
CheckBox {
// ...
}
Slider {
// ...
}
}
2.3 JavaScript资源导入
可以在QML文档中直接导入JavaScript资源。每个JavaScript资源都必须有一个用于访问的标识符。
JavaScript资源导入的一般形式如下:
import "<JavaScriptFile>" as <Identifier>