qt creator源码全方面分析(2-10-5)
The Plugin Manager, the Object Pool, and Registered Objects
通常,插件不需要直接访问插件管理器。 交互主要间接的通过ExtensionSystem::IPlugin接口。 在某些情况下,则必须使用插件管理器API。 插件需要访问插件管理器的对象池,以扩展Qt Creator的某些方面,例如将页面添加到选项对话框。 他们还可以利用对象池为其他插件提供扩展点。
插件管理器
插件管理器处理所有细节,包括查找插件,读取它们的描述文件,解决插件依赖性,以正确的顺序加载和初始化所有插件,以及传递命令行参数给插件。
另外,插件管理器管理对象池,可以根据不同的条件在其中注册和检索对象。
插件与插件管理器的大多数交互应通过ExtensionSystem::IPlugin接口完成,但是下表总结了一些对插件有用的函数和信号。 有关完整列表,请参见ExtensionSystem::PluginManager参考文档。
| 函数 | 描述 |
|---|---|
| instance() | 返回插件管理器单例,例如,用于连接信号。 |
| addObject() | 在对象池中注册对象。 也可以通过ExtensionSystem::IPlugin::addObject()。 |
| removeObject() | 从对象池中移除对象。 也可以通过ExtensionSystem::IPlugin::removeObject()。 |
| allObjects() | 返回对象池中注册的所有对象的未过滤列表。 |
| getObject() | 返回注册在对象池中的类型为T的对象。 这在向Aggregation致敬。 |
| getObjectByName(const QString &name) | 返回在对象池中注册的具有给定对象名称的对象。 |
| 信号 | 描述 |
|---|---|
| objectAdded(QObject *object) | 在对象被注册到对象池之后发送。 |
| aboutToRemoveObject(QObject *object) | 在对象从对象池中移除之前发送。 |
| initializationDone() | 在插件运行,且所有延迟的初始化完成时发送。 |
对象池和已注册对象
插件可以将对象注册到由插件管理器管理的公共池中。池中的对象必须派生自QObject,无需其他先决条件。
所有指定类型的对象,可以通过getObject()函数从对象池中检索。函数感知Aggregation::Aggregate,并使用Aggregation::query()函数,而不是qobject_cast来判断匹配对象。
可以通过allObjects()函数,检索在对象池中注册的所有对象的未过滤列表。
也可以使用getObjectByName(),检索具有特定对象名称的对象(参见QObject::objectName())。
每当对象池的状态更改时,插件管理器都会发出相应的objectAdded() 或 aboutToRemoveObject()信号。
对象池的一个常见用例是,一个插件(或应用程序)为其他插件提供了扩展点,扩展点为类,在其他插件中实现,并添加到对象池中,然后供提供扩展点的插件检索。也可以使用对象池来提供对对象的访问,而无需实际链接到提供的插件库。
原创造福大家,共享改变世界
献出一片爱心,温暖作者心灵

qt creator源码全方面分析(2-10-5)的更多相关文章
- 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 待办事项:应该对此进行扩 ...
随机推荐
- Oozie任务调度框架详解及使用简介(一)
摘要:个人最近一段时间一直在使用oozie,从刚开始的各种别扭到现在越来越觉得有意思的情况下,想整理一下关于oozie的认知,整理出来一个oozie系列,本来市面上关于oozie的资料就比较少,希望写 ...
- rest实践2
通过url读取图片资源 其他的上传图片和对应的添加信息到数据库等的相关操作则引入crud来操作,编写相关代码的话==>要引入相关的crud包.
- [bzoj4569] [loj#2014] [Scoi2016] 萌萌哒
Description 一个长度为 \(n\) 的大数,用 \(S1S2S3...Sn\) 表示,其中 \(Si\) 表示数的第 \(i\) 位, \(S1\) 是数的最高位,告诉你一些限制条件,每个 ...
- [bzoj2120] [洛谷P1903] 数颜色
Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...
- Wordpress4.9.6 任意文件删除漏洞复现分析
第一章 漏洞简介及危害分析 1.1漏洞介绍 WordPress可以说是当今最受欢迎的(我想说没有之一)基于PHP的开源CMS,其目前的全球用户高达数百万,并拥有超过4600万次的超高下载量.它是一个开 ...
- 使用静态URL片段 URL路由 精通ASP-NET-MVC-5-弗瑞曼
- java进阶视频分享
更多资源和教程请关注公众号:非科班的科班. 如果觉得我写的还可以请给个赞,谢谢大家,你的鼓励是我创作的动力 课程目录介绍 01.开班仪式02.并发编程专题之多线程基础03.并发编程专题之Java内存模 ...
- Centos7使用docker搭建Sentry
1.安装docker Sentry 是一款基于 Django实现的错误日志收集和聚合的平台,它是 Python 实现的,但是其日志监控功能却不局限于python,对诸如 Node.js, php,ru ...
- STVP编译时遇到no default placement for segment .FLASH_CODE
最近编译STM8S003时需要使用flash库函数,看起来简单,实则折腾了超过1天.今天总结方法如下: 1.修改stm8s.h 156行 #define RAM_EXECUTION 注释去掉 如 ...
- HTTP权威指南之URL与资源
前言 web基础中介绍了URI.URL与URN: URI是一类更通用的资源标识符,URL是它的一个子集: URI是一个通用的概念,它主要由URL与URN组成: URL是通过描述资源的位置来标识资源的, ...