插件元数据

插件元数据文件是一个 JSON 文件,其中包含加载插件库所需的所有信息,如确定插件是否加载及加载顺序(例如,根据依赖关系)。此外,它还包含关于创建者、用途以及如何找到更多信息等文本描述。该文件必须位于编译插件时包含搜索路径之一,且必须具有 .json 扩展名。JSON 文件将作为元数据编译到插件中,然后由 Qt Creator 在加载插件时读取。

主要键

用于识别您的插件并定义默认加载行为的默认键包括必修键 NameVersion,以及可选键 CompatVersionExperimentalDisabledByDefaultRequiredPlatform

值类型含义
Name字符串此用作插件标识符,例如可以在其他插件的依赖项中引用。
Version字符串版本字符串 x.y.z_n,用于识别插件。另见 插件版本的说明
CompatVersion字符串可选。如果未指定,则默认设置为与 Version 相同的值。兼容版本表明当前版本的插件与哪些版本的插件二进制兼容,并用于解决对当前插件的依赖关系。例如,Version2.1.1CompatVersion2.0.0 表示插件版本 2.1.1 与插件版本 2.0.0 及以下所有版本二进制兼容(包括 2.0.0)。
Experimental布尔值可选。默认为 false。实验性插件默认不加载,但必须由用户手动启用。此属性应启用对于可能影响用户体验的新插件。
DisabledByDefault布尔值可选。默认为 false。如果设置为启用,则相应的插件默认不加载,但必须由用户手动启用。这应该用于预计不会有很多用户使用,不足以证明额外资源消耗的插件。
Depreciated布尔值可选。默认为 false。过时插件默认不加载,但必须由用户手动启用。此属性是插件不再受支持的提示,可能会对用户体验产生负面影响。
SoftLoadable布尔值可选。默认为 false。软加载插件可以在运行时加载,无需重启。这对于仅挂钩支持运行时更新的功能的插件是可能的。
Required布尔值可选。默认为 false。用作指向 关于插件... 对话框的提示,表示用户可能无法手动禁用此插件。仅用于核心插件。
Platform字符串可选。匹配插件工作的平台名称的正则表达式。省略此标签意味着插件在所有平台上加载。

插件描述键

这些仅用于对插件进行更详细的(用户为中心)描述。所有这些都是可选的。

值类型含义
类别字符串默认为工具。用于在插件概览关于插件…中将相关插件放在同一树节点下。
供应商字符串描述插件创建者/供应商的字符串,如MyCompany
版权字符串简短的版权声明,如(C) 2016 MyCompany
许可字符串或字符串数组关于插件的许可信息,可能多行。应保持相对简短,因为UI未设计用于长文本。
描述字符串该插件应提供的内容的简要描述。当运行Qt Creator时显示-version
长描述字符串或字符串数组关于插件应提供的内容的可能多行、更详细描述。应保持相对简短,因为UI未设计用于长文本。
Url字符串有关插件的更多信息链接,如http://www.mycompany-online.com/products/greatplugin

依赖关系

插件可以依赖其他插件。这些在插件元数据中指定,以确保在其他插件加载之前加载这些插件。

依赖关系使用Dependency键声明,其中包含一个包含必需键NameVersion的JSON对象数组,以及可选键Type

以下公式说明了依赖信息如何匹配。在公式中,所需的插件名称(如依赖对象中定义的Name)表示为DependencyName,所需的插件版本表示为DependencyVersion。如果给定插件的NameVersion和插件元数据中定义的CompatVersion与依赖关系匹配,则该插件与依赖关系匹配

  • NameDependencyName匹配,并且
  • CompatVersion <= DependencyVersion <= Version.

例如,一个依赖项

{
    "Name" : "SomeOtherPlugin",
    "Version" : "2.3.0_2"
}

会被一个具有

{
    "Name" : "SomeOtherPlugin",
    "Version" : "3.1.0",
    "CompatVersion" : "2.2.0",
    ...
}

的插件匹配,因为名称匹配,且依赖项标签中给出的版本2.3.0_2位于范围2.2.03.1.0内。

值类型含义
依赖项依赖对象数组描述了对其他插件的依赖关系。

依赖对象是一个JSON对象,具有以下键

值类型含义
Name字符串该插件依赖于的插件名称。
Version字符串插件必须与之兼容的版本,格式为x.y.z_n。如果版本无关紧要,则可以留空。
类型字符串可选。值RequiredOptionalTest。定义了依赖关系是硬需求、可选的还是用于运行插件的测试的需求。默认为Required

可选依赖关系

插件可以通过在依赖对象中添加"Type" : "Optional"来指定对另一个插件的依赖关系是可选的

  • 如果依赖关系可以解决,那么插件和其依赖关系将被加载并初始化,就像Required依赖关系一样。
  • 如果依赖关系无法解决,则插件将被加载并初始化,就像未声明依赖关系一样。

插件没有任何方式得知存在可选依赖项。由于可能有或没有加载依赖项,插件可能也不会链接到依赖项。从可选依赖项访问对象的一种常见方式是通过全局对象池通过ExtensionSystem::PluginManager::getObjectByName() 获取对象,并使用QMetaObject函数调用其上的函数。

测试依赖项

当用户使用-test 命令行参数运行应用程序时,只会加载指定的插件及其依赖项。这样做的目的是通过避免加载不必要的插件来加快测试执行速度。

通过使用"Type" : "Test" 说明依赖项,插件可以指定其运行测试所需但正常执行时不需要的附加依赖项。测试依赖项将强制加载,并且不影响加载顺序。

此类依赖项不是可传递的。

命令行参数

插件可以注册用户在启动应用程序时可以提供的命令行参数。当用户使用-help 命令行参数运行应用程序时,这些命令行参数将与一行描述一起显示,并根据这些信息进行插件管理器的命令行解析和有效性检查。如果插件管理器发现与插件匹配的命令行参数,则将其传递到插件initialize()函数。

命令行参数通过键Arguments定义,其中包含一个参数对象数组。每个单独的参数对象都有必需的键Name,以及可选的键ParameterDescription

值类型含义
参数参数对象数组描述插件想要处理的命令行参数。

参数对象是一个包含以下键的JSON对象

值类型含义
Name字符串命令行参数本身,包括- 前缀,例如:-my-parameter
参数字符串可选。如果给出了,则命令行参数期望一个附加参数,例如:-my-parameter somevalue。此属性值用作参数的非常短的用户描述。
描述字符串可选。命令行参数帮助的参数描述(一行)。

示例 Test.json

{
    "Name" : "Test",
    "Version" : "1.0.1",
    "CompatVersion" : "1.0.0",
    "Vendor" : "My Company",
    "Copyright" : "(C) 2016 MyCompany",
    "License" : [
        "This is a default license bla",
        "blubbblubb",
        "end of terms"
    ],
    "Category" : "My Company Additions",
    "Description" : [
        "This plugin is just a test.",
        "It demonstrates the great use of the plugin meta data."
    ],
    "Url" : "http://www.mycompany-online.com/products/greatplugin",
    "Arguments" : [
        {
            "Name" : "-variant",
            "Parameter" : "fancy|boring",
            "Description" : "Brings up the fancy or boring user interface"
        }
    ],
    "Dependencies" : [
        { "Name" : "SomeOtherPlugin", "Version" : "2.3.0_2" },
        { "Name" : "EvenOther", "Version" : "1.0.0" }
    ]
}

其他元数据

值类型含义
.mime.types字符串或字符串数组可能是多行XML MIME-info,用于注册其他或修改内置MIME类型。
JsonWizardPaths字符串数组相对于插件位置的路径列表或Qt资源系统的路径,后者用于搜索基于模板的向导

关于插件版本的注意事项

插件版本的形式为 x.y.z_n,其中,xyzn 是非负整数。您无需使用这种完整形式指定版本 - 任何未指定的部分都将隐式设置为0。因此,2.10_2 等于 2.10.0_2,而11.0.0_0 相同。

©2024Qt公司有限公司。本文件中包含的文档贡献物是各自所有者的版权所有。本文件提供的文档根据Free Software Foundation发布的GNU自由文档许可版1.3条款进行许可。Qt及其相关标志是该公司在芬兰和/或世界其他国家的商标。所有其他商标均为各自所有者的财产。