QT插件学习系列(二) 插件管理器

QT插件学习系列(二) 插件管理器

1、 概述

上文中展示了一个简单的 QT Low-API 插件实例,但是这却满足不了大型应用程序的实际场景,没有扩展性。而插件间的通信、加载卸载(释放内存)、插件元数据、插件生命周期、插件依赖等问题,便是我们要做的。在QT内部,高级 API 有 PluginManager 负责做这些事,但是低级 API 就需要自己写插件管理器来帮助我们解决这些问题。

想象一台 windows 系统的电脑,包含了主机、显示屏、键鼠等部件。假如我们拔掉键盘,电脑不会出错,只是缺失了键盘的功能,因此键盘就可以看做是一个插件。与此同时一台完整的电脑不仅包含了键鼠,还有耳机、音响、光驱、显卡等部件,这些部件其实都可以看成插件。对 windows 来说,这些“插件”都有一个管理者,即为设备管理器。设备管理器负责添加和删除电脑所有的硬件和驱动,因此可以将设备管理器理解为插件管理器。最后一点电脑系统都有自己的内核,一个 windows 系统从启动到关机都是内核在响应,而内核就可以看做加载插件的主程序,仿佛:“一旦你插上,我就能用你来打游戏”。

通过上面的例子可以看到,一个插件化系统从大的方面来说包含三方面:

QT插件学习系列(二) 插件管理器_第1张图片

上图中红色圈的地方可引申出一层,即对应 windows 的驱动层,负责和内核通信。而对应到插件系统即为 “Adapter”,负责插件通信,可避免插件间的相互依赖耦合。这个下篇再讲。

2、 实例

首先,下面的代码及类名都是模仿 QT 源码进行编写(当然也存在些许不完善):

#

你可能感兴趣的:(QT,跨平台开发从入门到精通)