1. 什么是插件
插件机制是一种扩展现有程序的机制。插件允许第三方开发者在无需访问主程序源代码的情况下来扩展该程序。插件能够应用的各项服务,包括提供加载方式,使插件可以加载到应用程序和网络传输协议中,从而和插件进行数据交换等。简而言之,插件是提供特定接口的库。
2. QT插件API包括两个层次:
higher-level API:扩展QT
lower-level API:扩展QT应用程序(我们开发中应用到)——需要实现自己的接口
3. QT插件的两种类型:静态插件(静态库),动态插件(动态库,共享库):
静态插件能够静态的链接到应用程序,使得部署更少出错,但是应用程序重新构建和发布时难以增加新的功能;动态插件是更常用到和更灵活的方式,可以单独发布,并且可以在运行时检测和加载;
4. Qt的插件框架核心实现两个内容,一个是插件自身的功能实现,另一是主程序通过特定接口检测并加载插件。前者需要编程实现自己的接口,后者主要包括下面步骤:
1) 定义接口类:
1. 定义接口(纯虚类),该接口直接和插件类交流;
2. 使用宏Q_DECLARE_INTERFACE() 告诉Qt的 meta-object system 这个接口.
2) 应用程序部分:
1. 程序链接时指明接口库
2. 在应用程序中使用 QPluginLoader 检测并加载插件.
3. 使用 qobject_cast()测试插件是否给出了相应接口并进行类型转换,转换成接口对象指针.
3) 编码插件:
1. 声明插件类,这个类继承QObject 类和接口类;
2. 使用宏Q_INTERFACES() 告诉 Qt的 meta-object system 这个接口.
3. 使用宏 Q_EXPORT_PLUGIN2() 输出插件
4. 使用.pro 文件构建插件.
例子参看:http://hi.baidu.com/cyclone/blog/item/9c78b051b44f1c08367abeae.html
参考:
http://hi.baidu.com/cyclone/blog/item/0fc7462376f208429822ed1d.html
http://hi.baidu.com/cyclone/blog/item/9c78b051b44f1c08367abeae.html
http://doc.qt.nokia.com/4.7/plugins-howto.html
