欢迎来到天天文库
浏览记录
ID:5996860
大小:426.83 KB
页数:15页
时间:2017-12-30
《qt_plugin的创建和调用方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于QTPlugin框架结构日常总结2009-04-2418:56:02阅读168评论0字号:大中小订阅一:qtplugin介绍QtPlugin和其他类型的插件一样,是一种计算机应用程序,它和主应用程序(hostapplication)互相交互,以提供特定的功能。应用程序支持Plugin有许多原因,一些主要原因包括:使得第三方开发者有能力扩展应用程序,以提供无法先期预料的特色;减小应用程序的大小;由于软件版权之间的不兼容性将源代码和应用程序分享。QtPlugin分动态插件和静态插件两种。二:qtplugin创建和使用方法Qt有两种
2、与插件有关的API。一种用来扩展Qt本身的功能,如自定义数据库驱动,图像格式,文本编解码,自定义分格,等等,称为Higher-LevelAPI。另一种用于应用程序的功能扩展,称为Lower-LevelAPI。前一种是建立在后一种的基础之上的。这里讨论的是后一种,即用来扩展应用程序的Lower-levelAPI。让应用程序支持插件扩展的步骤:1.定义一个接口集(只有纯虚函数的类),用来与插件交流。2.用宏Q_DECLARE_INTERFACE()将该接口告诉Qt元对象系统。Q_DECLARE_INTERFACE(BrushInter
3、face,"com.trolltech.PlugAndPaint.BrushInterface/1.0")3.应用程序中用QPluginLoader来装载插件。4.用宏qobject_cast()来确定一个插件是否实现了接口。QObject*obj=newQTimer;QTimer*timer=qobject_cast(obj);写一个插件的步骤:1.声明插件类,该类从QObject和该插件希望实现的接口继承而来。2.用宏Q_INTERFACES()将该接口告诉Qt元对象系统。classBasicToolsPlu
4、gin:publicQObject,publicBrushInterface,publicShapeInterface,publicFilterInterface{Q_OBJECTQ_INTERFACES(BrushInterfaceShapeInterfaceFilterInterface)public:...};3.用宏Q_EXPORT_PLUGIN2()导出插件。Q_EXPORT_PLUGIN2(PluginName,ClassName)4.用适当的.pro文件构建插件。下面的代码声明了一个接口类:classFilterIn
5、terface{public:virtual~FilterInterface(){}virtualQStringListfilters()const=0;virtualQImagefilterImage(constQString&filter,constQImage&image,QWidget*parent)=0;};Q_DECLARE_INTERFACE(FilterInterface,"com.trolltech.PlugAndPaint.FilterInterface/1.0")这里是实现该接口的插件类的定义:#includ
6、e#include#include#includeclassExtraFiltersPlugin:publicQObject,publicFilterInterface{Q_OBJECTQ_INTERFACES(FilterInterface)public:QStringListfilters()const;QImagefilterImage(constQString&filter,constQImage&image,
7、QWidget*parent);};根据插件的类型不同,pro文件中配置上有不同。下面是pro文件分析:TEMPLATE=lib//声明为lib,动态和静态插件一样。CONFIG+=pluginstatic//声明为plugin,带static表面为静态,否则为动态。INCLUDEPATH+=../..HEADERS=basictoolsplugin.hSOURCES=basictoolsplugin.cppTARGET=$$qtLibraryTarget(pnp_basictools)//指明插件的名称DESTDIR=../..
8、/plugandpaint/plugins加载插件的主应用程序默认在当前目录下的plugins文件夹中寻找可用插件,如果是动态插件,则直接放在plugins文件夹中便可,如果是静态,则需要在主应用程序的main函数的开始的地方用宏:Q_IMPORT
此文档下载收益归作者所有