QT 插件(QtPlugin)教程
为什么我们要学习插件化,其和 windows 导出 dll 有什么区别呢?
- 导出的动态库如果缺失,程序不能运行。但插件可以。
- 同一套代码,即可分别在 windows 下和 linux 下生成插件。
QT 本身提供两种插件支持,一种称为高级 API,一种称为低级 API。
- 高级API的作用是扩展 QT 程序本身,需要子类化 QT 提供的插件基类,例如现有的 QTSqlDriver,因此你可也以编写自己的 QTStyle 扩展 QT。
- 低级 API 的作用是扩展自己的程序,也就是动态库的形式,在windows下就是个dll。同时因为高级 API 基于低级 API 创建,因此掌握低级 API 用法,高级 API 的用法也不在话下。
插件管理器 Qt 本身提供了插件相关的技术,但并没有提供一个通用的插件框架!倘若要开发一个较大的 GUI 应用程序,并希望使其可扩展,那么拥有这样一个插件框架无疑会带来很大的好处。
插件系统构成 插件系统,可以分为三部分:
主系统 通过插件管理器加载插件,并创建插件对象。一旦插件对象被创建,主系统就会获得相应的指针/引用,它可以像任何其他对象一样使用。 插件管理器 用于管理插件的生命周期,并将其暴露给主系统。它负责查找并加载插件,初始化它们,并且能够进行卸载。它还应该让主系统迭代加载的插件或注册的插件对象。 插件 插件本身应符合插件管理器协议,并提供符合主系统期望的对象。 实际上,很少能看到这样一个相对独立的分离,插件管理器通常与主系统紧密耦合,因为插件管理器需要最终提供(定制)某些类型的插件对象的实例。