1.前言
插件是一种遵循一定规范的应用程序接口编写出来的程序。很多软件都有插件,插件有无数种。例如在IE中,安装相关的插件后,WEB浏览器能够直接调用插件程序,用于处理特定类型的文件。
2.QT插件API
Qt有两种与插件有关的API。一种用来扩展Qt本身的功能,如自定义数据库驱动,图像格式,文本编解码,自定义分格,等等,称为Higher-Level API。另一种用于应用程序的功能扩展,称为Lower-Level API。前一种是建立在后一种的基础之上的。这里讨论的是后一种,即用来扩展应用程序的Lower-level API。
3.应用程序支持插件扩展的步骤
1. 定义一个接口集(只有纯虚函数的类),用来与插件交流。
2. 用宏Q_DECLARE_INTERFACE()将该接口告诉Qt元对象系统。
3. 应用程序中用QPluginLoader来装载插件。
4. 用宏qobject_cast()来确定一个插件是否实现了接口。
4.写一个插件的步骤
写一个插件的步骤:
1. 声明插件类,该类从QObject和该插件希望实现的接口继承而来。
2. 用宏Q_INTERFACES()将该接口告诉Qt元对象系统。
3. 用宏 Q_EXPORT_PLUGIN2()导出插件。
4. 用适当的.pro文件构建插件。下面的代码声明了一个接口类:
这里是实现该接口的插件类的定义:
示例 Plug & Paint 的文档详细解释了这一过程。与Qt Designer有关的问题请看Creating Custom Widgets for Qt Designer 。 Echo Plugin Example 是一个关于如何实现扩展Qt应用程序的详细示例。
5.装载插件
装载插件时。Qt库有一些健全检查来确定插件能否被装载和使用。这就可以同时安装多个版本和Qt库配置。
与较高主版本和(或)次版本 的Qt库链接的插件不能被主版本和(或)次版本 较低的库装载。
原理: 一个使用新版Qt库的插件可能用了老版本没有的新特征。Trolltech有一个只在次版本 升级时添加新功能和API的政策,这就是为什么该测试只看主次版本 ,而不看补丁 。
Qt库和所有插件用一个联编关键字来联编。Qt库中的联编关键字被与插件中的联编关键字对照,如果相符,插件就被装载。如果联编关键字不符,Qt库就拒绝装载该插件。
原理: 见下文对联编关键字的解释。
编译插件来扩展应用程序时,确保插件和应用程序用同样的配置这一点很重要。这意味着如果应用程序是release模式编译的,那么插件也要是release模式。
若将Qt配置为debug和release模式都编译,但只在release模式下编译应用程序,就要确保你的插件也是在release模式下编译的。缺省的,若Qt的debug编译可用,插件就只在debug模式下编译。要强制插件用release模式编译,要在工程中添加:
CONFIG += release这能确保插件兼容应用程序中所用的库版本。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!