溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

QT插件

發(fā)布時間:2020-04-10 06:44:58 來源:網(wǎng)絡(luò) 閱讀:420 作者:WZM3558862 欄目:開發(fā)技術(shù)

插件代碼

接口類頭文件 MyPluginInterface.h


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

  1. #ifndef INTERFACES_H  

  2. #define INTERFACES_H  

  3.   

  4. #include <QtPlugin>  

  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);    // 不太妥的寫法(雖然這也是正確的虛函數(shù)聲明語句)  

  13.         // 注:接口類中的虛函數(shù)都應(yīng)有實體,或設(shè)置為0(推薦),這樣  

  14.         // C++的編譯器才能為接口類生成虛函數(shù)表。否則,如果沒有實現(xiàn)  

  15.         // 接口類的虛函數(shù)也沒有將其設(shè)為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 <QObject>  

  5. #include <QDebug>  

  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  





應(yīng)用程序代碼

接口類頭文件 MyPluginInterface.h,該文件與插件代碼中的一致。

主程序文件 main.cpp


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

  1. #include "MyPluginInterface.h"  

  2. #include <QtPlugin>  

  3. #include <QApplication>  

  4. #include <QWidget>  

  5. #include <QPluginLoader>  

  6. #include <QString>   

  7. #include <QtDebug>  

  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<MyPluginInterface*>(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()<<errorStr;  

  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  


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

qt
AI