QML模块
QML模块提供版本化的类型和JavaScript资源,这些类型和资源位于类型命名空间中,可以供导入该模块的客户使用。模块提供的类型可以定义在插件中的C++内,或者在QML文档中。模块利用QML版本化系统,允许模块独立更新。
定义QML模块允许:
- 在项目内部共享常见的QML类型 - 例如,由不同窗口使用的UI组件组
- 分发基于QML的库
- 将不同功能模块化,以便应用程序只加载其个别需要的库
- 对类型和资源进行版本化,以确保模块可以安全更新而不会破坏客户代码
定义QML模块
模块通过一个模块定义qmldir文件定义。每个模块都有一个关联的类型命名空间,这是模块的标识符。模块可以提供QML对象类型(通过QML文档或C++插件定义)和JavaScript资源,并且可以被客户导入。
为了定义一个模块,开发者应将属于该模块的各种QML文档、JavaScript资源和C++插件收集到单个目录中,并编写一个适当的模块定义qmldir文件,该文件也应放入目录中。然后,可以将该目录安装到QML导入路径作为模块。
请注意,定义模块不是在项目内部共享常见QML类型的唯一方法 - 简单的QML文档目录导入也可以用于此目的。
支持的QML模块类型
QML支持两种不同类型的模块
标识模块明确定义了它们的标识符,并安装到QML导入路径。标识模块更易于维护(由于类型版本化),同时QML引擎提供了类型注册保证,这是遗留模块所没有的。遗留模块仅支持以允许遗留代码继续与最新版本的QML一起工作,客户应尽可能地避免使用。
客户可以在QML文档或JavaScript文件中导入QML模块。请参阅有关导入QML模块的文档,了解更多相关信息。
在C++插件中提供类型和功能
在 C++ 中实现很多逻辑或定义 C++ 类型并将其暴露给 QML 的应用程序可能希望实现一个 QML 插件。QML 扩展模块的开发者可能希望在一个 C++ 插件(而不是通过 QML 文档定义)中实现一些类型,以达到更好的性能或更大的灵活性。
每个 QML 插件都有一个初始化函数,当 QML 引擎加载插件时会调用该函数。此初始化函数必须注册插件提供的任何类型,但不能进行其他任何操作(例如,不允许实例化 QObjects)。
有关更多信息,请参阅 为 QML 创建 C++ 插件。
© 2024 Qt 公司有限。此处包含的文档贡献属于其各自所有者。此处提供的文档依据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 及相关标志是芬兰和/或世界其他地区的 Qt 公司的 商标。所有其他商标均为其各自所有者的财产。