qt_add_qml_plugin
简介
qt_add_qml_plugin( target [BACKING_TARGET backing_target] [STATIC | SHARED] [OUTPUT_DIRECTORY] [URI] [CLASS_NAME] [NO_GENERATE_PLUGIN_SOURCE] [NAMESPACE namespace] )
如果禁用了无版本命令,请使用qt6_add_qml_plugin()
代替。它支持与本命令相同的参数集。
说明
此命令创建与 QML 模块相关联的插件目标。它通常由qt_add_qml_module()在内部调用,以创建或更新与其支持目标相关联的插件。除非在特殊情况下需要以特殊方式创建目标,否则不应直接调用此函数。
qt_add_qml_module()的文档描述了与 QML 模块关联的 CMake target 的不同结构模式。请注意,即使 QML 模块没有单独的支持目标,所有功能都直接在插件中实现(不是推荐的安排),你仍然应该调用qt_add_qml_module()而不是qt_add_qml_plugin()
。
参数
target
指定要用于 QML 插件的目标名称。如果它不存在,将被创建。
BACKING_TARGET
指定插件关联的后备目标的名称。后备目标可以与插件 相同,在这种情况下,只有一个合并目标,但通常不建议这样做(更多信息请参阅target
qt_add_qml_module())。除非有特殊情况,需要在后备目标之前创建插件目标,否则应始终提供 。如果未提供 ,则必须提供 选项。BACKING_TARGET
BACKING_TARGET
URI
默认情况下,插件的创建类型与后备目标兼容。如果后备目标是静态库,插件也将创建为静态库。如果后备目标是共享库,插件将作为模块库创建。如果没有提供后备目标或插件没有单独的后备目标,则可使用STATIC
或SHARED
关键字指定插件类型。如果插件类型不是由上述条件决定的,那么如果 Qt 是作为静态库构建的,则将创建静态插件,否则将创建模块库插件。
OUTPUT_DIRECTORY
指定创建插件库的目录。它应始终与 QML 模块的qmldir文件位置相同。当 未给出时,将从 上存储的信息(如有)中获取。请注意,这可能与后备目标自身库的目录不同。如果无法从后备目标获取输出目录,则默认使用 。OUTPUT_DIRECTORY
BACKING_TARGET
CMAKE_CURRENT_BINARY_DIR
URI
声明该插件关联的 QML 模块的模块标识符。模块标识符是 QML 模块的(点式 URI 符号)标识符。如果 未给出,则必须提供 ,并且后备目标必须有其 URI 记录(通常是通过调用URI
BACKING_TARGET
qt_add_qml_module())。
每个插件都应有一个 C++ 类,用于向 QML 引擎注册模块。默认情况下,qt_add_qml_plugin()
会自动生成该 C++ 类的源代码,并将它们添加到target
的源代码列表中。生成的插件类满足插件可选的要求(见模块定义 qmldir 文件)。类名的确定方法如下:
- 如果已给出
CLASS_NAME
,则将使用该名称。它必须与 QML 模块的qmldir
文件中使用的名称一致。 - 如果没有提供
CLASS_NAME
,但提供了BACKING_TARGET
,则 C++ 类名将取自该后备目标记录的详细信息。这些细节通常是通过先前调用qt_add_qml_module() 记录下来的,它们将与生成的qmldir
文件中使用的名称相匹配。在大多数情况下,这是提供类名的推荐方法。 - 如果仍无法确定类名,则将其设置为模块的 URI,并将点替换为下划线,同时添加
Plugin
。
如果使用NAMESPACE
关键字给出了命名空间,则插件代码将生成到该名称的 C++ 命名空间中。
有些插件可能需要手动编写插件类。例如,插件可能需要执行额外的初始化或注册默认插件类没有实现的功能。在这种情况下,可以给出NO_GENERATE_PLUGIN_SOURCE
选项。然后,您需要编写自己的 C++ 插件类,并将其添加到target
中。请注意,如果您需要编写自己的插件类,那么该插件就不太可能是可选的。这反过来意味着,在定义 QML 模块时,调用qt_add_qml_module()时应包含NO_PLUGIN_OPTIONAL
关键字,否则生成的qmldir
文件将是不正确的。确保你的插件类使用与上述逻辑所确定的相同的类名。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.