Qt 动态插件编写要点是本文要介绍的内容,有介绍Qt插件在.pro工程文件中的内容,不多说了,先来看内容。
一、编写插件的四个步骤
1. 声明一个插件类。
2. 实现插件提供的接口。
3. 使用Q_EXPORT_PLUGIN2() 宏导出插件。
4. 使用一个适当的.pro工程文件构建插件。
二、声明插件类
我们继承QObject和接口类(interface类)两个类来构造这个插件类。Q_INTERFACES宏告知Qt这个类实现的是哪个接口。如:
- Q_INTERFACES(FilterInterface)
三、实现插件提供的接口
在插件类的实现文件中实现插件所提供的接口,供调用。
四、导出插件
在插件接口实现文件中,我们使用Q_EXPORT_PLUGIN2宏让Qt知道该类是一个插件。如:
- 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)注意到接口。如:
- 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 动态插件编写要点的内容介绍完了,希望本篇文章对你有帮助!!!