成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Qt中如何 編寫插件 加載插件 卸載插件

移動開發
本文介紹的是Qt中如何 編寫插件 加載插件 卸載插件,本文將一一的詳解,請先來看內容。

Qt中如何 編寫插件 加載插件 卸載插件是本文要介紹的內容。Qt提供了一個類QPluginLoader來加載靜態庫和動態庫,在Qt中,Qt把動態庫和靜態庫都看成是一個插件,使用QPluginLoader來加載和卸載這些庫。由于在開發項目的過程中,要開發一套插件系統,就使用了Qt的這套類庫。

一 編寫插件

編寫一個Qt的插件需要以下步驟

1.聲明一個插件類,

2.定義一個類,實現這個插件類定義的接口,定義的這個類必須從QObject集成下來。

3.使用Q_INTERFACESQ_INTERFACES()告知Qt的元系統這個接口的存在

3.使用宏Q_EXPORT_PLUGIN2()來導出插件的接口

4.編寫插件類的.pro文件

下面是一個插件的例子

  1. class FilterInterface  
  2. {  
  3. public:  
  4.      virtual ~FilterInterface() {}  
  5.  
  6.      virtual QStringList filters() const = 0;  
  7.      virtual QImage filterImage(const QString &filter, const QImage &image,  
  8.                                 QWidget *parent) = 0;  
  9. }; 

注意:接口類必須是一個純虛函數

  1. Q_DECLARE_INTERFACE(FilterInterface,"com.trolltech.PlugAndPaint.BrushInterface/1.0")  

為了使得程序在運行時刻可以查詢一個插件是否實現了給定的接口,必須使用宏Q_DECLARE_INTERFACE()。他的第一個參數是這個接口的名字,第二個參數是一個確定接口的字符串。方便起見,使用了JAVA包的命名方法。如果后來我們改變接口,必須使用一個新的字符串來確認接口。否則,應用程序可能崩潰,所以包括一個版本號是一個不錯的方法。

  1. #include <QObject> 
  2. #include <QStringList> 
  3. #include <QImage> 
  4.  
  5. #include <plugandpaint/interfaces.h> 
  6.  
  7. class ExtraFiltersPlugin : public QObject, public FilterInterface  
  8. {  
  9.      Q_OBJECT  
  10.      Q_INTERFACES(FilterInterface)  
  11.  
  12. public:  
  13.      QStringList filters() const;  
  14.      QImage filterImage(const QString &filter, const QImage &image,  
  15.                         QWidget *parent);  
  16. }; 

實現這個接口類。實現接口的這個類必須從QObject派生下來,并且必須實現接口類里定義的虛函數。

Q_EXPORT_PLUGIN2(PlugExtraFilters,  ExtraFiltersPlugin )由于應用函數使用main()函數作為入口點,插件必須使用宏Q_EXPORT_PLUGIN2()來指定那個類提供插件。

這一行代碼可以出現在實現接口類的.cpp文件的任何一行。其中第一個參數為插件的名稱,第二個參數為插件類

二 使用插件

  1. QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));   
  2.        QObject *plugin = loader.instance();  
  3.            if (plugin) {  
  4.              populateMenus(plugin);   
  5.               pluginFileNames += fileName;  
  6. }     

 
QPluginLoader類提供了一個函數loader來加載插件的實例,如果動態鏈接庫不是一個插件,或者編譯的Qt的版本庫不對,返回的QObject對象的指針為空。使用unload函數來卸載插件。

三 .pro文件的編寫

  1. TEMPLATE 
  2.       = lib CONFIG  
  3.       += plugin  HEADERS 
  4.        = extrafiltersplugin.h SOURCES 
  5.        = extrafiltersplugin.cpp TARGET 
  6.        =  pnp_extrafilters DESTDIR 
  7.        = ../../plugandpaint/plugins TEMPLATE的類型為lib.CONFIG的類型為plugin 

小結:Qt中如何 編寫件 加載插件 卸載插件的內容介紹完了,希望本篇文章對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-13 15:09:36

插件 Qt Designer

2011-03-28 11:20:11

Nagios 插件

2011-04-06 16:02:26

Nagios插件

2011-06-27 16:59:19

Qt 動態 插件

2011-09-01 14:04:45

QT Webkit插件

2011-10-13 16:34:30

MeeGoQt插件

2023-11-07 10:19:08

2011-09-01 16:01:25

Qt插件

2011-06-24 15:16:33

Qt 插件

2011-06-16 13:23:35

Qt 模塊化 插件式

2011-06-09 17:26:17

Qt 插件 API

2015-05-07 14:45:40

Cocos 插件

2011-09-01 15:51:53

Qt插件VS 2010

2011-09-09 18:43:13

Qt Webkit瀏覽器

2011-07-05 17:07:46

Qt 插件 模塊

2009-12-04 10:19:04

2011-06-10 15:00:02

Qt VC

2022-06-20 08:08:04

Vim

2011-07-05 16:59:15

Qt 動態 鏈接庫

2023-12-12 08:08:17

插件PRPulsar
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久国 | 久久99精品久久久久 | 亚洲成人中文字幕 | 亚洲免费在线播放 | 一区二区av | 精品国产免费一区二区三区五区 | 亚州影院| 激情五月婷婷综合 | 最新午夜综合福利视频 | 精品91久久 | 狠狠骚| 三级成人在线观看 | 99久久婷婷国产综合精品电影 | 日韩综合网 | 国产亚洲精品美女久久久久久久久久 | 精品免费视频 | 午夜免费视频 | 国产做a爱片久久毛片 | 亚洲国产欧美日韩 | 欧美日韩国产高清 | 日韩欧美精品一区 | 亚洲一二三区精品 | 久久99久久| 在线免费观看黄a | 国产午夜精品一区二区三区四区 | 久久国产精品-久久精品 | 久久精品久久精品久久精品 | 精品视频一区在线 | 成人激情视频在线播放 | 成人在线播放网址 | 成人a在线观看 | 国产玖玖| 久久久久久蜜桃一区二区 | 国产伦精品一区二区三区精品视频 | 91国自产 | 午夜久久久 | 亚洲97 | 亚洲精品自在在线观看 | 久久国产成人午夜av影院武则天 | 97影院2| 欧美一级免费看 |