Plugin Meta Data

插件的元数据文件是一个JSON文件,包含加载插件库所需的所有信息,决定要加载哪些插件,以及加载顺序(取决于依赖关系)。此外,它包含插件的作者,插件的用途,以及在何处可以找到有关插件的更多信息。 编译插件时,该文件必须位于include搜索路径中,并且必须具有.json扩展名。 JSON文件将作为元数据编译到插件中,然后在加载插件时由Qt Creator读取。

主键

主键用于标识插件,定义默认加载行为,包括强制键Name和Version,和可选键CompatVersion,Experimental,DisabledByDefault,Required和Platform。

值类型 含义
Name String 用作插件的标识符,例如在其他插件的依赖项中进行引用。
Version String x.y.z_n形式的版本字符串,用于标识插件。 另请参阅本章的"插件版本说明"小节。
CompatVersion String 可选项。 如果未给出,则隐式设置为与Version相同的值。 兼容性版本说明当前版本能二进制后向兼容的插件的版本,并用于解决此插件的依赖关系。 即 Version2.1.1和CompatVersion 2.0.0,意味着插件的2.1.1版本是二进制后向兼容该插件的2.1.1~2.0.0的所有版本(含2.0.0)。
Experimental Boolean 可选项。默认为false。 实验性插件默认情况下不会被加载,而必须由用户显式使能。应该为可能会对用户体验产生负面影响的新插件使能此属性。
DisabledByDefault Boolean 可选项。默认为false。 如果设置了,相应的插件默认情况下不会被加载,而必须由用户显式使能。 应该为预计不会被太多人使用的插件进行设置,以减少附加资源消耗。
HiddenByDefault Boolean 可选项。 默认为false。如果设置了,则插件不会显示在"关于插件..."对话框的默认视图中,只有在用户要求查看所有插件时才显示。 如果有-version命令行参数一起时,它也显示。
Required Boolean 可选项。 默认为false。 作为"关于插件..."对话框的提示,提示用户可能无法手动禁用此插件。 仅用于Core插件。
Platform String 可选项。 正则表达式,匹配运行插件的平台名称。 省略标签,意味着该插件可加载在所有平台上。

插件描述键

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

值类型 含义
Category String 默认为Utilities。用于在"关于插件..."对话框的插件概述中,将相关联的插件放在同一树节点下。
Vendor String 字符串,描述插件创建者/供应商,例如MyCompany。
Copyright String 简短的版权声明,例如(C) 2016 MyCompany
License String or array of strings 关于插件的可能多行的许可信息。 由于UI并非为长文本而设计,因此应保持相对简短。
Description String or array of strings 对插件应该提供的内容进行可能多行的描述。 由于UI并非为长文本而设计,因此应保持相对简短。
Url String 链接到有关该插件的更多信息,例如http://www.mycompany-online.com/products/greatplugin

依赖

一个插件可以依赖于其他插件。 这些是在插件元数据中指定的,以确保将这些其他插件在此插件之前被加载。

依赖项通过Dependency键进行声明,键由JSON对象数组组成,包含强制键Name和Version,以及可选键Type。

以下公式说明了依赖项信息是如何匹配的。 在公式中,被依赖插件的名称(与被依赖对象元数据中定义的Name相同)表示为DependencyName,而被依赖插件的版本表示为DependencyVersion。 一个插件,具有在插件元数据定义的给定的Name,Version和CompatVersion,具备如下描述,则可成功匹配为依赖项,供其他插件依赖:

  • 它的Name 匹配DependencyName, 并且
  • 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.0~3.1.0的范围内。

值类型 含义
Dependencies 依赖对象数组 描述对其他插件的依赖

依赖对象是具有以下键的JSON对象:

值类型 含义
Name String 该插件所依赖的插件的名称。
Version String 必须兼容的用来填充依赖项的被依赖插件的版本,格式为x.y.z_n。 如果版本无关紧要,则可以为空。
Type String 可选项。 值为Required, Optional, 或 Test。 如果依赖项是硬性要求,或者有运行插件测试的要求,则定义之。 默认为Required

可选依赖项

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

  • 如果依赖关系可以被解决,则插件和它的依赖插件,将按照Required依赖关系进行加载和初始化。
  • 如果依赖关系无法被解决,则只有插件被加载并初始化,就好像根本没有声明依赖关系一样。

插件不会以任何方式被通知,是否存在可选依赖插件。因为依赖插件可能会被加载,也可能不会,插件也可能不会链接到该依赖插件。从可选依赖插件访问对象的一种常见方法,是通过ExtensionSystem::PluginManager::getObjectByName() 或ExtensionSystem::PluginManager::getObjectByClassName()从全局对象池中获取对象,并在获取的对象上,调用QMetaObject函数。

测试依赖项

当用户使用-test命令行参数运行应用程序时,仅加载指定的插件及其依赖插件。这样做是为了避免加载不需要的插件,从而加快测试的执行速度。

通过使用"Type" : "Test"声明依赖关系,插件可以指定,要求执行测试功能,而不是执行正常功能的依赖插件。测试依赖项是强制加载的,并且不影响加载顺序。

这种依赖性不传递。

命令行参数

插件可以注册命令行参数,用户可以在启动应用程序时提供的。当用户使用-help命令行参数运行应用程序时,这些命令行参数将以单行说明的形式显示,并且插件管理器会基于该信息进行命令行解析和完整性检查。如果插件管理器为插件找到匹配的命令行参数,会传递给给插件的initialize()函数。

命令行参数是通过Arguments键定义的,该键包含一个参数对象数组。每个单独的参数对象,都具有强制键Name,以及可选键Parameter和Description。

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

参数对象是具有以下键的JSON对象:

值类型 含义
Name String 命令行参数本身,包含前缀符号'-',例如-my-parameter
Parameter String 可选项。 如果指定了此参数,则命令行参数需要一个附加值,例如-my-parameter somevalue。 此属性的值作为简短描述,提供给用户。
Description String 可选项。参数的(单行)描述,用于命令行参数帮助。

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" }
]
}

插件版本说明

插件版本的格式为x.y.z_n,其中x,y,z和n是非负整数。 您不必以完整格式指定版本 - 任何遗漏的部分都将隐式设置为零。 因此,2.10_2等于2.10.0_2,并且1与1.0.0_0相同。


原创造福大家,共享改变世界

献出一片爱心,温暖作者心灵


qt creator源码全方面分析(2-10-3)的更多相关文章

  1. qt creator源码全方面分析(3-3)

    目录 qtcreatordata.pri 定义stripStaticBase替换函数 设置自定义编译和安装 QMAKE_EXTRA_COMPILERS Adding Compilers 示例1 示例2 ...

  2. qt creator源码全方面分析(3-5)

    目录 qtcreatorlibrary.pri 使用实例 上半部 下半部 结果 qtcreatorlibrary.pri 上一章节,我们介绍了src.pro,这里乘此机会,把src目录下的所有项目文件 ...

  3. qt creator源码全方面分析(0)

    本人主攻C++和Qt. 上两天刚研究完Qt install framework(IFW)应用程序安装框架. google没发现有正儿八经的官方文档的翻译,我就进行了翻译哈!! 系列文章具体见:http ...

  4. qt creator源码全方面分析(4-0)

    Qt系统 Qt Creator源码是在Qt对象和框架基础下写的,因此,阅读Qt Creator源码,你首先对Qt得有一定的了解. Qt Core Qt Core特征: The Meta-Object ...

  5. qt creator源码全方面分析(4-2)

    目录 global头文件 global.h xx.h global头文件 插件的本质就是动态链接库,对于库,需要导出符号,供用户导入使用.在qt creator的源码中,存在固定的导入导出模式. gl ...

  6. qt creator源码全方面分析(4-5)

    目录 Qt中的字符串 QLatinString 详细介绍 源码 小结 QStringLiteral(str) 详细介绍 源码 小结 Qt中的字符串 Qt中处理字符串最常用的肯定是QString,但是在 ...

  7. qt creator源码全方面分析(4-6)

    目录 Qt插件基础 Qt插件基础 我们知道Qt Creator源码是基于插件架构的,那么我们先来介绍下插件基础知识. 相关内容如下: How to Create Qt Plugins [ - Defi ...

  8. qt creator源码全方面分析(3-2)

    目录 qtcreator.pri 判断重复包含 定义版本信息 VERSION 定义IDE名称 启用C++14 CONFIG 自定义函数 Replace Functions Test Functions ...

  9. qt creator源码全方面分析(2-7)

    目录 Completing Code 补全代码片段 编辑代码片段 添加和编辑片段 删除片段 重置片段 补全Nim代码 Completing Code 在编写代码时,Qt Creator建议使用属性,I ...

  10. qt creator源码全方面分析(2-10-1)

    目录 Getting and Building Qt Creator 获取Qt 获取和构建Qt Creator Getting and Building Qt Creator 待办事项:应该对此进行扩 ...

随机推荐

  1. Flask快速实现简单python接口

    Flask 是一个轻量级 web 框架,自由.灵活.可扩展性强.Flask 本身相当于一个内核,大部分功能都需要扩展第三方库. Flask 框架有多“轻量”呢,之前写过一篇 Django实现restf ...

  2. Spark 配置参数

    SparkConfiguration 这一章节来看看 Spark的相关配置. 并非仅仅能够应用于 SparkStreaming, 而是对于 Spark的各种类型都有支持. 各个不同. 其中中文参考链接 ...

  3. mysql 多主一从

    一.主服务器准备 1.1.环境准备 两台主机器ip分别为 100.100.100.105 (主1) 100.100.100.106(主2) 安装 mysql [root@centos ~]# yum ...

  4. Spring Boot2 系列教程 (十六) | 整合 WebSocket 实现广播

    前言 如题,今天介绍的是 SpringBoot 整合 WebSocket 实现广播消息. 什么是 WebSocket ? WebSocket 为浏览器和服务器提供了双工异步通信的功能,即浏览器可以向服 ...

  5. 使用rabbitmq手动确认消息的,定时获取队列消息实现

    描述问题 最近项目中因为有些数据,需要推送到第三方系统中,因为数据会一直增加,并且需要与第三方系统做相关交互. 相关业务 本着不影响线上运行效率的思想,我们将增加的消息放入rabbitmq,使用另一个 ...

  6. RegExp正则表达式基础

    什么是正则表达式 正则表达式用于对字符串模式匹配及检索替换 如何创建正则 有两种创建正则的方法: js风格 new RegExp(pattern [, flags]) perl风格 /pattern/ ...

  7. Java入门 - 语言基础 - 20.Stream和File和IO

    原文地址:http://www.work100.net/training/java-stream-file-io.html 更多教程:光束云 - 免费课程 Stream和File和IO 序号 文内章节 ...

  8. Codeforces Round #615 (Div. 3) 题解

    A - Collecting Coins 题意: 给你四个数a,b,c,d,n.问你是否能将n拆成三个数A,B,C,使得A+a=B+b=C+c. 思路: 先计算三个数的差值的绝对值abs,如果abs大 ...

  9. Uva1014:Remember the Word

    Neal is very curious about combinatorial problems, and now here comes a problem about words. Knowing ...

  10. 美食家App开发日记5

    今天将ListView控件用更强大的Recyclerview控件取代,最后调试了程序. 感觉Android编程难度实在是远远高于javaweb,初次接触,感觉有很多东西想实现,想得很容易,但是实现起来 ...