对Qt插件功能实现的理解
2012-07-12 19:49
525 查看
Qt提供的plugin实现功能对于软件实现模块化和后期软件维护有很大的帮助,下面通过自己对Qt源代码的理解,将Qt如何实现插件功能梳理如下:
实现Qt插件要求在插件的实现文件中声明Q_EXPORT_PLUGIN2宏,该宏定义了一个全局函数qt_plugin_instance函数,该函数的功能便是返回插件对象的实例,源代码如下:
static QT_PREPEND_NAMESPACE(QPointer)<QT_PREPEND_NAMESPACE(QObject)> _instance; \
if (!_instance) \
_instance = new IMPLEMENTATION; \
return _instance;
2. 有了这个全局函数,在客户端程序上便可以调用dlopen得到动态链接库句柄,然后使用dlsym得到全局函数指针,有了这个指针便能创建Qt插件对象,于是乎便实现了动态加载插件的功能。
实现Qt插件要求在插件的实现文件中声明Q_EXPORT_PLUGIN2宏,该宏定义了一个全局函数qt_plugin_instance函数,该函数的功能便是返回插件对象的实例,源代码如下:
static QT_PREPEND_NAMESPACE(QPointer)<QT_PREPEND_NAMESPACE(QObject)> _instance; \
if (!_instance) \
_instance = new IMPLEMENTATION; \
return _instance;
2. 有了这个全局函数,在客户端程序上便可以调用dlopen得到动态链接库句柄,然后使用dlsym得到全局函数指针,有了这个指针便能创建Qt插件对象,于是乎便实现了动态加载插件的功能。
相关文章推荐
- js插件zClip实现复制到剪贴板功能
- 兼容所有浏览器的JQuery zClip插件实现复制到剪贴板功能
- 抽象工厂模式实现的dll插件功能.
- ThinkPHP中引入iDialog插件来实现查看全文功能
- 实现类Excel表格编辑功能的jQuery插件:Handsontable
- 安防监控直播中无插件web直播方案中实现快照抓取的功能
- js+插件实现代码复制及动态生成二维码扫描、分享到朋友圈QQ空间功能
- Qt GraphicsView框架中实现多个item之间的层次调整功能
- QT实现浏览器插件 调用及回调 (三)
- 【Qt】Qt 导出 PDF,Android和Qt截图功能实现
- 利用Qt插件实现HellowWord
- bootstrap fileinput插件实现预览上传照片功能
- [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
- sublime3 BufferScroll插件实现折叠功能
- Qt一步一步实现插件调用(附源码)、Qt一步一步实现插件通信(附源码)
- Sencha Touch 2 中 listpaging 与 pullrefresh 2个插件的使用(分页功能实现)
- QT 线程池 + TCP 小试(三)实现最终功能
- EasyNVR无插件直播服务器如何使用ffmpeg实现摄像机快照功能的
- QT学习之lQLable实现超链接功能
- ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)