QT插件

插件代码

接口类头文件 MyPluginInterface.h

[cpp] view plain copy 

  1. #ifndef INTERFACES_H
  2. #define INTERFACES_H
  3. #include <QtPlugin>
  4. #define QtPluginDemo_iid "org.qt-project.Qt.PluginDemo"
  5. class MyPluginInterface
  6. {
  7. public:
  8. virtual int add(int,int) = 0 ;  // 正确写法
  9. // virtual int add(int,int);    // 不太妥的写法(虽然这也是正确的虚函数声明语句)
  10. // 注:接口类中的虚函数都应有实体,或设置为0(推荐),这样
  11. // C++的编译器才能为接口类生成虚函数表。否则,如果没有实现
  12. // 接口类的虚函数也没有将其设为0,程序在在链接时可能会失败,
  13. // 或者链接成功但最后生成的库无法加载(库中有未定义的符号)
  14. };
  15. Q_DECLARE_INTERFACE ( MyPluginInterface, QtPluginDemo_iid ) ;
  16. #endif

插件头文件 MyPlugin.h

[cpp] view plain copy 

  1. #ifndef MYPLUGIN__H
  2. #define MYPLUGIN__H
  3. #include <QObject>
  4. #include <QDebug>
  5. #include "MyPluginInterface.h"
  6. class MyPlugin : public QObject, public MyPluginInterface
  7. {
  8. Q_OBJECT
  9. Q_PLUGIN_METADATA ( IID QtPluginDemo_iid FILE "MyPlugin.json")
  10. Q_INTERFACES(MyPluginInterface)
  11. public:
  12. int add(int,int);
  13. };
  14. #endif

插件源文件 MyPlugin.cpp

[cpp] view plain copy 

  1. #include "MyPlugin.h"
  2. int MyPlugin::add(int a , int b)
  3. {
  4. return a+b ;
  5. }
  6. #include "moc_MyPlugin.cpp"

JSON文件 MyPlugin.json,本示例中该文件是空的。

工程文件 MyPlugin.pro

[cpp] view plain copy 

  1. TEMPLATE      = lib
  2. CONFIG       += plugin console
  3. QT           += core
  4. HEADERS       = MyPlugin.h MyPluginInterface.h
  5. SOURCES       = MyPlugin.cpp
  6. OTHER_FILES   = MyPlugin.json
  7. TARGET        = MyPlugin
  8. DESTDIR       = ./
  9. INCLUDEPATH  += ./
  10. # install
  11. target.path = ./install
  12. INSTALLS += target

应用程序代码

接口类头文件 MyPluginInterface.h,该文件与插件代码中的一致。

主程序文件 main.cpp

[cpp] view plain copy 

  1. #include "MyPluginInterface.h"
  2. #include <QtPlugin>
  3. #include <QApplication>
  4. #include <QWidget>
  5. #include <QPluginLoader>
  6. #include <QString>
  7. #include <QtDebug>
  8. int main(int argc, char *argv[])
  9. {
  10. QApplication app(argc, argv);
  11. QWidget w;
  12. QObject* object ;
  13. w.show();
  14. app.addLibraryPath(QString("../MyPlugin/install")); // 添加库路径
  15. // 加载插件,取得实例
  16. QPluginLoader l(QString("MyPlugin")) ;
  17. //QPluginLoader l(QString("libMyPlugin.so")) ;
  18. if ( (object=l.instance()) != NULL )
  19. {
  20. qDebug("plugin loaded .");
  21. // 使用插件
  22. int a = 14 , b = 23 ;
  23. MyPluginInterface* plugin = qobject_cast<MyPluginInterface*>(object) ;
  24. if (plugin)
  25. qDebug("%d + %d = %d",a,b,plugin->add(a,b));
  26. }
  27. else
  28. {
  29. qDebug("failed to load plugin !! ");
  30. QString errorStr = l.errorString();
  31. qDebug()<<errorStr;
  32. }
  33. return app.exec();
  34. }

MyApp.pro

[cpp] view plain copy 

  1. ######################################################################
  2. # Automatically generated by qmake (3.0) ?? 11? 19 02:26:33 2014
  3. ######################################################################
  4. TEMPLATE = app
  5. QT += gui core widgets
  6. CONFIG += console
  7. TARGET = MyApp
  8. INCLUDEPATH += .
  9. # Input
  10. HEADERS += MyPluginInterface.h
  11. SOURCES += main.cpp
时间: 2024-10-16 20:23:52

QT插件的相关文章

设置qt插件路径

1.在Qt中使用 WebKit 浏览器核心 使用 QtWebKit 需要在工程文件(*.pro)中加入: QT +=webkitQT += network 2.QtWebKit的flash支持 QtWebKit 到固定的路径(NPAPI插件厂商的安装路径)下载入flash控件,如果需要flash支持,确保一下文件存在: C:\WINDOWS\system32\Macromed\Flash\NPSWF32.dll npswf32.dll就是 QtWebKit 需要的flash插件,由 microm

Qt5的插件机制(6)--开发Qt插件时几个重要的宏

怎样开发Qt插件,能够在Qt Assistant 中搜索"Qt Plugins"或"How to Create Qt Plugins",看看那篇manual中的介绍. 当中涉及到了几个宏 Q_DECLARE_INTERFACE( ClassName, Identifier) This macro associates the given Identifier (a string literal) to the interface class called Class

Eclipse添加Qt插件

此文件仅为步骤操作作一个记录,以便以后方便查阅. 1.操作大体参考这个网站:http://blog.csdn.net/defonds/article/details/5013412 2.我的运行环境:使用TQ210硬件开发平台,编译器是天嵌提供的4.4.6,Eclipse好像是我自己下载安装的,问题是现在要给Eclipse装Qt的插件. 3.去Qt网站上下载Qt的源码,Qt提供的Eclipse插件.妈蛋,这里弄错了几次.在上面的文章中,会有介绍说,根据自己的操作系统位数下载对应的Eclipse

Qt5的插件机制(4)--Qt插件的元信息metaData

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Qt 插件学习(一)

插件是什么 注意:这儿暂时不考虑静态插件(潜意识中总觉得它根本就不算插件). 插件是一个动态库(共享库).动态库是一个独立的文件中的独立模块,可被多个程序访问. 先看动态库的两种用法 1. 程序链接时指明动态库 这时程序中包含相应的头文件,编译时指定头文件路径,对于qmake来说: LIBS += -L/path1/path2/.../ -labcdINCLUDEPATH += /p1/p2/.../ 这样一来,程序启动时会自动加载需要的链接库. 2. 程序中动态加载动态库 运行过程中找到来查找

VS2010中安装Qt插件错误

安装完QT插件,启动VS2010时提示:Couldn't register all Qt4VSAddin commands:未能加载文件或程序集"stdole,version=7.0.3300.0......"一个很长的对话框,点击确定后,进入VS2010 IDE界面后,没有qt插件菜单. 需要在windows的cmd窗口中加载stdold.dll的.net程序集,如下: "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\N

Qt 插件综合编程-基于插件的OpenStreetMap瓦片查看器client(1)-墨卡托投影与坐标控制

(相关的代码能够从https://github.com/goldenhawking/mercator.qtviewer.git直接克隆) 我们如今是准备做一个C/S架构的地图显示控件.就必定牵扯到坐标系和UI的界面控制. 1.墨卡托投影 眼下osm採用墨卡托投影,这个投影的原理能够用一个假想实验解释. 如果地球是一个透明的球体.在球体的球心有一个光源.我们把一张幕布沿着赤道卷起来.使之与地球内切,地球上的一个点在这块幕布上的投影就是其墨卡托投影位置. 上图中,地球半径是R=6378137米,可想

VS2013平台安装Qt插件过程

1.下载所需安装包: Qt5.3.Qt插件下载地址:http://qt-project.org/downloads. qt-vs-addin-1.1.11-opensource.exe 下载地址:http://download.qt.io/official_releases/vsaddin/qt-vs-addin-1.1.11-opensource.exe.mirrorlist 2.安装过程选择默认安装路径. 3.配置开发环境 选择:Qt5->Qt Options->Add,配置VS的开发环境

VS2010,Qt插件安装使用

用了几次的QtCreateor,不习惯. 果断换回VS 基本步骤: 1.安装VS2010 2.安装Qt Creator5 3.安装Qt插件 qt-vs-addin-1.2.2-opensource 就可以在VS中新建Qt项目. 常见问题: 1.unable to find a qt build,to solve this problem specify a qt build 解决方法: 打开VS,菜单栏中有个Qt(Qt5)选项  Qt->Qt Options, Qt Versions中 add-