详解 Qt 动态插件编写要点

移动开发
本文介绍的是Qt 动态插件编写要点,一般在编程的过程中都要注意编写规则,那么性质一样,先来看本文内容。

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 动态插件编写要点的内容介绍完了,希望本篇文章对你有帮助!!!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-09-01 14:04:45

QT Webkit插件

2011-06-27 17:24:37

Qt 插件

2011-09-01 16:01:25

Qt插件

2011-06-24 15:16:33

Qt 插件

2011-06-24 09:01:20

Qt QLibrary dll

2011-07-05 17:54:43

QT Sqlite ARM

2011-08-23 18:04:40

LuaWiresharkDissector

2011-09-01 15:51:53

Qt插件VS 2010

2011-06-30 13:37:29

MFC Qt 多国语

2011-07-05 16:59:15

Qt 动态 链接库

2011-07-05 17:07:46

Qt 插件 模块

2011-06-23 10:16:55

VS2010 QT 4.7.2 QT

2011-06-16 13:23:35

Qt 模块化 插件式

2012-05-10 09:46:02

动态数据中心

2011-06-29 10:46:01

Qt Eembedded Linux

2011-04-06 16:02:26

Nagios插件

2011-03-28 11:20:11

Nagios 插件

2011-06-23 14:27:48

QT QLibrary 动态库

2011-07-13 10:36:53

Delphi

2011-04-21 09:46:41

设计模式
点赞
收藏

51CTO技术栈公众号