QT插件
admin
2023-08-03 09:47:41
0

插件代码

接口类头文件 MyPluginInterface.h


[cpp] view plain copy QT插件QT插件

  1. #ifndef INTERFACES_H  

  2. #define INTERFACES_H  

  3.   

  4. #include   

  5.   

  6. #define QtPluginDemo_iid "org.qt-project.Qt.PluginDemo"  

  7.   

  8. class MyPluginInterface  

  9. {  

  10. public:  

  11.     virtual int add(int,int) = 0 ;  // 正确写法  

  12.     // virtual int add(int,int);    // 不太妥的写法(虽然这也是正确的虚函数声明语句)  

  13.         // 注:接口类中的虚函数都应有实体,或设置为0(推荐),这样  

  14.         // C++的编译器才能为接口类生成虚函数表。否则,如果没有实现  

  15.         // 接口类的虚函数也没有将其设为0,程序在在链接时可能会失败,  

  16.         // 或者链接成功但最后生成的库无法加载(库中有未定义的符号)  

  17. };  

  18.   

  19. Q_DECLARE_INTERFACE ( MyPluginInterface, QtPluginDemo_iid ) ;  

  20.   

  21. #endif  


插件头文件 MyPlugin.h


[cpp] view plain copy QT插件QT插件

  1. #ifndef MYPLUGIN__H  

  2. #define MYPLUGIN__H  

  3.   

  4. #include   

  5. #include   

  6. #include "MyPluginInterface.h"  

  7.   

  8.   

  9. class MyPlugin : public QObject, public MyPluginInterface  

  10. {  

  11.     Q_OBJECT  

  12.     Q_PLUGIN_METADATA ( IID QtPluginDemo_iid FILE "MyPlugin.json")  

  13.     Q_INTERFACES(MyPluginInterface)  

  14.   

  15. public:  

  16.     int add(int,int);  

  17. };  

  18.   

  19. #endif  


插件源文件 MyPlugin.cpp



[cpp] view plain copy QT插件QT插件

  1. #include "MyPlugin.h"  

  2.   

  3. int MyPlugin::add(int a , int b)  

  4. {  

  5.     return a+b ;  

  6. }  

  7.   

  8. #include "moc_MyPlugin.cpp"  



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

工程文件 MyPlugin.pro


[cpp] view plain copy QT插件QT插件

  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 QT插件QT插件

  1. #include "MyPluginInterface.h"  

  2. #include   

  3. #include   

  4. #include   

  5. #include   

  6. #include    

  7. #include   

  8.   

  9. int main(int argc, char *argv[])  

  10. {  

  11.     QApplication app(argc, argv);  

  12.     QWidget w;  

  13.     QObject* object ;  

  14.     w.show();  

  15.       

  16.     app.addLibraryPath(QString("../MyPlugin/install")); // 添加库路径  

  17.     // 加载插件,取得实例  

  18.     QPluginLoader l(QString("MyPlugin")) ;  

  19.     //QPluginLoader l(QString("libMyPlugin.so")) ;  

  20.   

  21.     if ( (object=l.instance()) != NULL )  

  22.     {  

  23.         qDebug("plugin loaded .");  

  24.         // 使用插件  

  25.         int a = 14 , b = 23 ;  

  26.         MyPluginInterface* plugin = qobject_cast(object) ;  

  27.         if (plugin)  

  28.             qDebug("%d + %d = %d",a,b,plugin->add(a,b));  

  29.     }  

  30.     else  

  31.     {  

  32.         qDebug("failed to load plugin !! ");  

  33.         QString errorStr = l.errorString();  

  34.         qDebug()<

  35.     }  

  36.     return app.exec();  

  37. }  


MyApp.pro



[cpp] view plain copy QT插件QT插件

  1. ######################################################################  

  2. # Automatically generated by qmake (3.0) ?? 11? 19 02:26:33 2014  

  3. ######################################################################  

  4.   

  5. TEMPLATE = app  

  6. QT += gui core widgets  

  7. CONFIG += console  

  8. TARGET = MyApp  

  9. INCLUDEPATH += .  

  10.   

  11. # Input  

  12. HEADERS += MyPluginInterface.h  

  13. SOURCES += main.cpp  


相关内容

热门资讯

台风“巴威”带来风雨影响 多地... ↑ 7月11日,在位于上海市奉贤区的海湾城宿舍楼安置点,转移安置好的群众在房间内休息。新华社记者 王...
美国“鹰派”参议员格雷厄姆突然... 美国共和党“鹰派”参议员林赛·格雷厄姆办公室通讯主任于美东时间7月12日凌晨在社交平台发文称,格雷厄...
灵心巧手申请机器人专利,提高了... 国家知识产权局信息显示,灵心巧手(北京)科技股份有限公司申请一项名为“机器人”的专利,公开号CN12...
“入河排污口”成免费戏水乐园,... 近日,一段郑州市民拍摄的视频在网络引发关注。视频中,一块写有“入河排污口”的告示牌下,河水清澈,岸边...
邱议莹呛蒋万安“放台风假经济损... 海峡导报综合报道 台风“巴威”来袭,台北市政府10日停止上班上课,台股也休市一天。民进党民代邱议莹质...
伊朗打击中东多处美军设施回应袭... 当地时间12日,伊朗对美国在中东地区的目标发动一系列打击,旨在回应美军当天早些时候对伊朗发动的袭击。...
油烟机感应器失灵怎么办 1、出现这种情况有可能是整个面板漏电,加上油渍,导致开关感应不到,这个时候可以将油烟机进行清理,用抹...
方太油烟机触摸屏进水失灵怎么办 如果是焊盘进水导致漏电,从而引发的失灵。可以把盘子拆下清洗板子、焊上筷子,再清洗板子吹干。接着重新安...
台籍科研工作者:见证大陆科技飞... 中新社上海7月12日电 (记者 缪璐)“我见证了大陆科技从‘跟跑’到‘并跑’乃至‘领跑’的跨越,能够...
饭店油烟机不转怎么办 可以看一下电容器的表面状况,如果发现有烧焦的痕迹,那就表示电容器已经坏了。这时需要及时更换一个相同型...