QT学习笔记(18)——QT插件(1)

目录

  • 前言
  • 知识点
    • 插件系统
    • 开发插件的方式
    • 回调函数
    • Qt调用第三方库
  • 参考文献

前言

今天开始,开始正式接触插件,这里也会稍微记录一下比较重要的插件知识。

知识点

插件系统

插件系统,可以分为三部分:

  1. 主系统 :
    通过插件管理器加载插件,并创建插件对象。一旦插件对象被创建,主系统就会获得相应的指针/引用,它可以像任何其他对象一样使用。
  2. 插件管理器
    用于管理插件的生命周期,并将其暴露给主系统。它负责查找并加载插件,初始化它们,并且能够进行卸载。它还应该让主系统迭代加载的插件或注册的插件对象。
  3. 插件
    插件本身应符合插件管理器协议,并提供符合主系统期望的对象。

开发插件的方式

Qt中为我们提供了两种开发插件的方式。

  1. 一种是使用High-Level API接口,一种是使用Low-Level API接口。所谓High-Level API 是指通过继承Qt为我们提供的特定的插件基类,然后实现一些虚函数、添加需要的宏即可。该种插件开发方式主要是用来扩展Qt库本身的功能,比如自定义数据库驱动、图片格式、文本编码、自定义样式等。
  2. 而我们为自己的应用程序编写插件来扩展其功能时主要使用第二种方式,即Low-Level API 的方式,该方式不仅能扩展我们自己的应用程序,同样也能像High-Level API 那样用来扩展Qt本身的功能。使用这种方式,我们可以将我们需要扩展的功能写成一个 接口,然后让一个插件类去实现这个接口的功能,再使用Qt提供的用于插件开发的宏,按Qt要求的格式对插件进行声明,之后我们就可以在应用程序中使用QPluginLoader 来动态的加载该插件,从而完成应用程序功能的扩展。

回调函数

  1. 使用场景:假设A类包含B类的对象,B类有动作时想要通知到A类,B类应该有个设置回调函数的接口,A类应该定义相应的回调函数,将函数指针传递给B。
  2. 我的理解:我理解“回调机制”是window 在执行某个API函数的过程中,调用指定的一个函数。
  3. 再抽象一点:类A调用类B的方法b(传入相关信息),类B的方法在执行完后,会将结果写到(再回调)类A的方法a,完成动作。(其实方法a就是传说中的回调方法啦)

Qt调用第三方库

  1. 如果在没有导入库文件(.lib),而只有头文件(.h)与动态链接库(.dll)时,我们才需要显示调用,如果这三个文件都全的话,我们就可以使用简单方便的隐式调用。
  2. 通常Windows下程序显示调用dll的步骤分为三步(三个函数):LoadLibrary()、GetProcAdress()、FreeLibrary()
  1. LoadLibrary() 函数用来载入指定的dll文件,加载到调用程序的内存中(DLL没有自己的内存!)
  2. GetProcAddress() 函数检索指定的动态链接库(DLL)中的输出库函数地址,以备调用
  3. FreeLibrary() 释放dll所占空间

参考文献

  1. 用qt调用第三方库
  2. C++/QT–调用第三方库dll总结

你可能感兴趣的:(QT,QT,插件)