QT插件学习系列(一) 初识QtPlugin

QT插件学习系列(一) 初识QtPlugin

1、 概述

为什么我们要学习插件化,其和 windows 导出 dll 有什么区别呢?

  1. 导出的动态库如果缺失,程序不能运行。但插件可以。
  2. 同一套代码,即可分别在 windows 下和 linux 下生成插件。

QT 本身提供两种插件支持,一种称为高级 API,一种称为低级 API。

  1. 高级API的作用是扩展 QT 程序本身,需要子类化 QT 提供的插件基类,例如现有的 QTSqlDriver,因此你可也以编写自己的 QTStyle 扩展 QT。
  2. 低级 API 的作用是扩展自己的程序,也就是动态库的形式,在windows下就是个dll。同时因为高级 API 基于低级 API 创建,因此掌握低级 API 用法,高级 API 的用法也不在话下。

QT 的插件加载需要用到类 QPluginloader,你可以编写支持任意功能的插件。如何创建一个插件和加载这个插件 QT Assist 中是这样描述的:

创建一个扩展应用程序的插件:

  1. 定义一组用于与插件对话的接口(仅具有纯虚拟函数的类)。(预留好接口,方便建立通信)。
  2. 接口内使用 Q_DECLARE_INTERFACE() 宏告诉qt的元对象系统有关接口的信息。
  3. 使用 QPluginLoader 加载插件。
  4. 使用 qobject_cast 检验插件是否实现了既定的接口(以防外部插件注入),转换成功即可得到插件实例。

插件编写具体步骤(代码编写):

  1. 声明插件类,并继承 QObject 和 实现上面提到的既定接口。
  2. 使用 Q_INTERFACES 告诉 QT 元对象系统有关这个接口的信息(虚方法)。
  3. 使用 Q_PLUGIN_METADATA 导出插件。(Q_PLUGIN_METADATA 是 QT5的宏,QT4 使用的是 Q_EXPORT_P

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