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  


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...