详解 Qt 动态插件编写要点
创始人
2024-08-01 19:50:55
0

Qt 动态插件编写要点是本文要介绍的内容,有介绍Qt插件在.pro工程文件中的内容,不多说了,先来看内容。

一、编写插件的四个步骤

1. 声明一个插件类。

2. 实现插件提供的接口。

3. 使用Q_EXPORT_PLUGIN2() 宏导出插件。

4. 使用一个适当的.pro工程文件构建插件。

二、声明插件类

我们继承QObject和接口类(interface类)两个类来构造这个插件类。Q_INTERFACES宏告知Qt这个类实现的是哪个接口。如:

  1. Q_INTERFACES(FilterInterface) 

三、实现插件提供的接口

在插件类的实现文件中实现插件所提供的接口,供调用。

四、导出插件

在插件接口实现文件中,我们使用Q_EXPORT_PLUGIN2宏让Qt知道该类是一个插件。如:

  1. Q_EXPORT_PLUGIN2(pnp_extrafilters, ExtraFiltersPlugin); 

***个参数是插件的名字;通常给予插件和其生成的目标库文件(.pro中TARGET变量所赋的名字)有着相同的名字。

五、动态插件的 .pro工程文件

Here’s the project file for building the Extra Filters plugin:

TEMPLATE      = lib     //模块设置,lib指生成库文件,app指生成应用程序(默认)

CONFIG       += plugin  //CONFIG用来告诉qmake关于应用程序的配置信息,静态插就添加为plugin static。
      
INCLUDEPATH  += ../..    //INCLUDEPATH变量设置全局头文件的寻找路径(例如使用

#include <…>包含的头文件) “.”当前目录,”..”上一层目录。(在这里是为了能够添加接口定义文件interface.h)  

HEADERS       = extrafiltersplugin.h  //工程中包含的头文件

SOURCES       = extrafiltersplugin.cpp //工程中包含的源文件

TARGET        = $$qtLibraryTarget(pnp_extrafilters) //TARGET变量指定生成的目标库文件的名字,生成应用程序时即指定生成应用程序名

通常TARGET和插件(由Q_EXPORT_PLUGIN2设置)拥有相同的名字。
    
DESTDIR         = ../../plugandpaint/plugins  //DESTDIR变量指定我们要安装(生成)

插件的地方,即指定放置生成的应用程序(插件)的目录。
    
用蓝色字体显示的表示根据具体应用程序会做相应改变。

六、接口的定义

接口类定义了插件所提供的函数。一个接口是一个只由纯虚函数组成的类。

我们使用Q_DECLARE_INTERFACE宏让Qt的元对象系统(meta object system)注意到接口。如:

  1. Q_DECLARE_INTERFACE(FilterInterface, "com.trolltech.PlugAndPaint.FilterInterface/1.0"); 

这样做才有可能在运行时识别插件并实现接口。第二个参数是一个必须以唯一的方式识别接口的字符串。

注:Qt Creator编译链接后会将可执行文件生成到一个projectname_build_desktop的目录中,如想要生成的文件生成在源代码所在目录下,方法如下:

 选择Qt Creator左边的“Project”标签,General栏目中有一个选择框“Shadow Build”,取消即可。
 
Shadow Build也就是使构建生成的目录和源代码目录分开,可根据自己的使用习惯设置。

七、插件Qt工程文件.pro往Visual Studio 2005中的移植

Qt插件的.pro工程文件中,会包含构建插件所需的特定配置信息,在VS 2005中写插件程序时,需要在工程属性中进行对应配置,才能顺利生成动态插件。

注:在Qt或VS 2005中编写Qt插件程序,都是建立Qt C++的控制台应用程序工程。

以下是Qt Creator中.pro文件和VS 2005中配置信息的对应实现关系:

1、TEMPLATE     = lib   VS中对应设置:工程属性配置属性常规项目默认值配置类型其值改为 动态库(.dll)
  
2、CONFIG      += plugin  这个貌似在VS中没有配置的地方

3、INCLUDEPATH += .  VS中对应设置:工程属性配置属性C/C++常规附加包含目录中其值在***添加.,即当前路径。
       
4、SOURCES += \      helloworldplugin.cpp
       
5、HEADERS += \     helloworldplugin.h
       
6、TARGET       = $$qtLibraryTarget(helloworld)    DESTDIR      = ./plugin  VS中对应设置:工程属性配置属性链接器 输出文件将其值改为 plugin\helloworld.dll

小结:详解 Qt 动态插件编写要点的内容介绍完了,希望本篇文章对你有帮助!!!

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...