qt creator源码全方面分析(2-10-3)
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)的更多相关文章
- qt creator源码全方面分析(3-3)
目录 qtcreatordata.pri 定义stripStaticBase替换函数 设置自定义编译和安装 QMAKE_EXTRA_COMPILERS Adding Compilers 示例1 示例2 ...
- qt creator源码全方面分析(3-5)
目录 qtcreatorlibrary.pri 使用实例 上半部 下半部 结果 qtcreatorlibrary.pri 上一章节,我们介绍了src.pro,这里乘此机会,把src目录下的所有项目文件 ...
- qt creator源码全方面分析(0)
本人主攻C++和Qt. 上两天刚研究完Qt install framework(IFW)应用程序安装框架. google没发现有正儿八经的官方文档的翻译,我就进行了翻译哈!! 系列文章具体见:http ...
- qt creator源码全方面分析(4-0)
Qt系统 Qt Creator源码是在Qt对象和框架基础下写的,因此,阅读Qt Creator源码,你首先对Qt得有一定的了解. Qt Core Qt Core特征: The Meta-Object ...
- qt creator源码全方面分析(4-2)
目录 global头文件 global.h xx.h global头文件 插件的本质就是动态链接库,对于库,需要导出符号,供用户导入使用.在qt creator的源码中,存在固定的导入导出模式. gl ...
- qt creator源码全方面分析(4-5)
目录 Qt中的字符串 QLatinString 详细介绍 源码 小结 QStringLiteral(str) 详细介绍 源码 小结 Qt中的字符串 Qt中处理字符串最常用的肯定是QString,但是在 ...
- qt creator源码全方面分析(4-6)
目录 Qt插件基础 Qt插件基础 我们知道Qt Creator源码是基于插件架构的,那么我们先来介绍下插件基础知识. 相关内容如下: How to Create Qt Plugins [ - Defi ...
- qt creator源码全方面分析(3-2)
目录 qtcreator.pri 判断重复包含 定义版本信息 VERSION 定义IDE名称 启用C++14 CONFIG 自定义函数 Replace Functions Test Functions ...
- qt creator源码全方面分析(2-7)
目录 Completing Code 补全代码片段 编辑代码片段 添加和编辑片段 删除片段 重置片段 补全Nim代码 Completing Code 在编写代码时,Qt Creator建议使用属性,I ...
- qt creator源码全方面分析(2-10-1)
目录 Getting and Building Qt Creator 获取Qt 获取和构建Qt Creator Getting and Building Qt Creator 待办事项:应该对此进行扩 ...
随机推荐
- docker启动报错 (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport
今天修改完docker宿主机的防火墙文件 vim /etc/sysconfig/iptables 停止容器再启动时 报如下错误 (iptables failed: iptables --wait -t ...
- ubuntu16.04 docker kubernetes(k8s) istio 安装
版本: docker: 19.03.5 kubernetes: 1.17.0 istio: 1.4.3 步骤一:给ubuntu换源 https://www.cnblogs.com/lfri/p/106 ...
- 七牛云 融合CDN测试域名 -> 融合CDN加速域名
七牛云 融合CDN测试域名 -> 融合CDN加速域名 本篇主要讲解 如何将七牛云融合CDN测试域名 切换到自定义的加速域名上去,为什么会写这篇是因为我收到了一封 [七牛云]测试域名回收通知的邮件 ...
- 数据可视化之Matplotlib的使用
1.什么是数据可视化 数据可视化在量化分析当中是一个非常关键的辅助工具,往往我们需要通过可视化技术,对我们的数据进行更清晰的展示,这样也能帮助我们理解交易.理解数据.通过数据的可视化也可以更快速的发现 ...
- 干货!SQL性能优化,书写高质量SQL语句
写SQL语句的时候我们往往关注的是SQL的执行结果,但是是否真的关注了SQL的执行效率,是否注意了SQL的写法规范? 以下的干货分享是在实际开发过程中总结的,希望对大家有所帮助! 1. limit分页 ...
- 三分钟带你入门GitHub
一,首先,我们来说一下什么是GitHub GitHub是一个基于git打造的开源社区 ,同时也是一个大型同性交友平台 ,作为一个专业的程序员,你非常有必要知道并使用GitHub:作为一个国际化社区,所 ...
- Gitlab安装配置管理
◆安装Gitlab前系统预配置准备工作1.关闭firewalld防火墙# systemctl stop firewalld# systemctl disable firewalld 2.关闭SELIN ...
- 毒瘤养成记1: 如何卡hash
各位毒瘤大家好, 最近模拟赛考了一道trie+主席树好题, 但大家都用hash水过了这道题(包括我), 为了测试一下新搭建的HEAT OJ的hack功能, 我将继续扮演毒瘤的角色, 用毒瘤的艺术形象努 ...
- HBase的安装、配置与实践
本教程运行环境是在Ubuntu-64位系统下,HBase版本为hbase-1.1.2,这是目前已经发行的已经编译好的稳定的版本,带有src的文件是未编译的版本,这里我们只要下载bin版本hbase-1 ...
- 富文本编辑器、全文检索和django发送邮件
1.富文本编辑器 1.1快速了解 借助富文本编辑器,网站的编辑人员能够像使用offfice一样编写出漂亮的.所见即所得的页面.此处以tinymce为例,其它富文本编辑器的使用也是类似的. 在虚拟环境中 ...