# 创建插件

Qt Creator包含创建QtQuick 2 QML Extension Plugin的向导。在创建新项目时,可以在Library下找到此向导。 这里使用它来创建一个名为fileio的插件,它带有一个在模块org.example.io中启动的FileIO对象。

提示

当前向导生成一个基于QMake的项目。 请使用本章的示例作为构建基于CMake项目的起点。

该项目应包含fileio.hfileio.cpp(它们声明和实现了FileIO类型)、fileio_plugin.cpp(它包含允许QML引擎发现此扩展的实际插件类).

此插件类派生自QQmlEngineExtensionPlugin类,包含Q_OBJECTQ_PLUGIN_METADATA宏。 整个文件如下所示:

#include <QQmlEngineExtensionPlugin>

class FileioPlugin : public QQmlEngineExtensionPlugin
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID QQmlEngineExtensionInterface_iid)
};

#include "fileio_plugin.moc"

该扩展将自动发现并注册所有标有QML_ELEMENTQML_NAMED_ELEMENT的类型。 将在下面FileIO的实现部分查看这是如何完成的。

为了使模块的导入能够使用,用户还需要指定一个URI,例如import org.example.io。 有趣的是,在任何地方都看不到模块的URI。 这是使用qmldir文件从外部设置的,或者在项目的CMakeLists.txt文件中设置的。

qmldir文件指定了QML插件的内容,或者更好地指定了插件在QML端的导入内容。 手写的插件的qmldir文件应如下所示:

module org.example.io
plugin fileio

模块是用户要导入的URI,在它之后命名为该URI加载哪个插件。 插件行使用的名称必须与插件的文件名相同(在qmldir中是名称为fileio的插件,在mac中对应的文件系统中名称为libfileio_debug.dylib,在Linux系统中文件系统中文件名为libfileio.so)。 这些文件由Qt Creator根据给定的信息创建。

创建正确的qmldir文件的更简单方法是在项目的CMakeLists.txt文件中的qt_add_qml_module宏中声明。 在这里,URI参数用于指定插件的URI,例如org.example.io。 这样设置后,在构建项目时就会生成qmldir文件。

TODO

如何安装模块?

当导入名为"org.example.io"的模块时,QML引擎将查看其中一个导入路径并尝试使用qmldir定位"org/example/io"路径。 然后qmldir将告诉引擎使用哪个模块URI作为QML扩展插件时加载哪个库。 具有相同URI的两个模块将会相互覆盖。

最后更新: 2/10/2022, 8:12:32 PM