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

詳解如何建立Qt插件學(xué)習(xí)教程

移動(dòng)開發(fā)
如何建立Qt插件學(xué)習(xí)教程是本文要介紹的內(nèi)容,主要是來了解QT中插件的應(yīng)用,如何來建立,文中有詳解,具體內(nèi)容的實(shí)現(xiàn)來看詳解。

如何建立Qt插件學(xué)習(xí)教程是本文要介紹的內(nèi)容,主要是來了解QT插件的應(yīng)用,如何來建立,文中有詳解,具體內(nèi)容的實(shí)現(xiàn)來看詳解。

QT提供2個(gè)API來建立插件

1、高層API擴(kuò)展QT庫。例如定制的數(shù)據(jù)庫驅(qū)動(dòng),圖像格式,字符編碼,custom styles

2、底層API擴(kuò)展QT應(yīng)用程序

例如,如果想寫自定義QStyle的子類,并讓應(yīng)用程序動(dòng)態(tài)加載,需要使用高層API函數(shù)

因?yàn)楦邔覣PI在底層API基礎(chǔ)上構(gòu)造,兩者需要注意一些問題。

如果需要提供給QT Designeder插件,請(qǐng)參考QtDesigner模型文檔

高層API

利用繼承特定的基類來實(shí)現(xiàn)插件,需要實(shí)現(xiàn)其中的一些函數(shù),并增加一個(gè)宏

QT中有不少插件的基類可供使用,繼承的插件默認(rèn)保存在標(biāo)準(zhǔn)插件目錄的子目錄下,否則Qt會(huì)找不到。

設(shè)計(jì)一個(gè)style類名為MyStyle的插件

文件mystyleplugin.h:

  1. class MyStylePlugin : public QStylePlugin  
  2. {  
  3. public:  
  4. QStringList keys() const;    //返回此插件能夠使用的style名稱列表。  
  5. QStyle *create(const QString &key);//根據(jù)傳入的style名稱,返回style。  
  6. };  
  7.  
  8. mystyleplugin.cpp  
  9. #include "mystyleplugin.h"  
  10.  
  11. QStringList MyStylePlugin::keys() const  
  12. {  
  13. return QStringList() << "MyStyle";  
  14. }  
  15.  
  16. QStyle *MyStylePlugin::create(const QString &key)  
  17. {  
  18. if (key.toLower() == "mystyle")  
  19. return new MyStyle;  
  20. return 0;  
  21. }  
  22.  
  23. Q_EXPORT_PLUGIN2(pnp_mystyleplugin, MyStylePlugin) 

風(fēng)格實(shí)現(xiàn)

文件mystyle.h:

  1. class MyStyle : public QWindowsStyle  
  2. {  
  3. Q_OBJECT  
  4.  
  5. public:  
  6. MyStyle() {};  
  7.  
  8. void polish(QPalette &palette);  
  9. }; 

繼承自QWindowsStyle

風(fēng)格實(shí)現(xiàn)

  1. void MyStyle::polish(QPalette &palette)  
  2. {  
  3. palette.setBrush(QPalette::Button, Qt::red);  

(注意其中實(shí)現(xiàn)的大小寫方式)。

實(shí)現(xiàn)數(shù)據(jù)庫驅(qū)動(dòng),圖像格式、文本編碼和大多數(shù)其他插件類型時(shí),一般不需要建立對(duì)象,Qt會(huì)找到他們并建立他們的對(duì)象。Style是一個(gè)特例,因?yàn)槌绦蛑锌颇軙?huì)這樣調(diào)用:

  1. QApplication::setStyle(QStyleFactory::create("MyStyle")); 

main.c文件:

  1. int main(int argv, char *args[])  
  2. {  
  3. QApplication app(argv, args);//QT此時(shí)加載了插件  
  4. QApplication::setStyle(QStyleFactory::create("simplestyle"));  
  5.  
  6. StyleWindow window;  
  7. window.resize(200, 50);  
  8. window.show();  
  9.  
  10. return app.exec();  

工程文件:

  1. TEMPLATE    = lib 
  2. CONFIG     += plugin  
  3. HEADERS     = simplestyle.h \  
  4. simplestyleplugin.h  
  5. SOURCES     = simplestyle.cpp \  
  6. simplestyleplugin.cpp  
  7. TARGET      = simplestyleplugin 

注意,插件需要設(shè)置TEMPLATE,因?yàn)槲覀冃枰氖枪蚕韼於皇菆?zhí)行程序。同時(shí)必須設(shè)置CONFIG。需要將此插件保存到style文件夾(應(yīng)用程序所在的文件夾)。這樣應(yīng)用程序就能夠檢測(cè)得到。

底層API:沒有詳細(xì)研究

不管是QT本身還是QT應(yīng)用程序都可以通過插件擴(kuò)展。這需要應(yīng)用程序檢測(cè)并通過QPluginLoader進(jìn)行加載。因此,插件可以提供任意功能,而不僅限于上面說的插件。

插件擴(kuò)展應(yīng)用包括4個(gè)步驟

1、定義插件的接口集(實(shí)際上是只有虛函數(shù)的一個(gè)類)

2、Q_DECLARE_INTERFACE宏告訴meta-object系統(tǒng)此接口的存在。

3、利用QPluginLoader加載插件

4、使用qobject_cast()函數(shù)測(cè)試插件實(shí)現(xiàn)的借口

插件編碼的4個(gè)步驟

1、繼承QObject定義一個(gè)插件類,并定義插件需要的接口

2、使用Q_InterFaces()宏告訴meta-object系統(tǒng)接口的存在

3、使用Q_EXPORT_PLUGIN2()宏輸出插件

4、編譯工程

例如下面例子:

接口類:

  1. class FilterInterface    //只有虛函數(shù)的類  
  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. }; 

插件類,實(shí)現(xiàn)接口

  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. }; 

定位插件

QT應(yīng)用程序自動(dòng)加載插件,因?yàn)椴寮嬖跇?biāo)準(zhǔn)插件的子目錄中

開發(fā)過程中,插件的目錄在QTDIR/plugins中(QDIR是QT安裝的目錄)。如果希望應(yīng)用程序使用或不使用標(biāo)準(zhǔn)插件,安裝會(huì)得到希望安裝插件的路徑,并保存路徑(例如應(yīng)用程序使用QSettings在啟動(dòng)時(shí)讀取它)

應(yīng)用程序可以通過QCoreApplication:addLibraryPath是插件對(duì)于應(yīng)用程序可見,注意,最終的路徑不能改變。

如果希望插件可被加載,一種方法是在應(yīng)用程序的所在目錄的子目錄下保存此插件。如果想發(fā)布QT自帶的任何插件,需要拷貝plugins的子目錄到應(yīng)用程序的根目錄下。(而不是包含插件的目錄)

靜態(tài)插件

一般的方法是將插件做成動(dòng)態(tài)庫和應(yīng)用程序一塊發(fā)布。插件動(dòng)態(tài)檢測(cè)和加載。

應(yīng)用程序可以靜態(tài)鏈接。假如編譯的是靜態(tài)的QT庫,那么靜態(tài)插件就是唯一的選擇了。使用靜態(tài)插件可以降低錯(cuò)誤概率。但是缺點(diǎn)是修改插件需要重新編譯整個(gè)應(yīng)用程序。

QT提供一些靜態(tài)的插件:

為了靜態(tài)鏈接插件,需要在程序中使用Q_IMPORT_PLUGIN宏,需要在編譯時(shí)使用QTPLUGIN參數(shù)。例如,在main.cpp中

  1. #include <QApplication> 
  2. #include <QtPlugin> 
  3.  
  4. Q_IMPORT_PLUGIN(qjpeg)  
  5. Q_IMPORT_PLUGIN(qgif)  
  6. Q_IMPORT_PLUGIN(qkrcodecs)  
  7.  
  8. int main(int argc, char *argv[])  
  9. {  
  10. QApplication app(argc, argv);  
  11. ...  
  12. return app.exec();  

工程文件中

  1. QTPLUGIN     += qjpeg \  
  2. qgif \  
  3. qkrcodecs 

小結(jié):詳解如何建立Qt插件學(xué)習(xí)教程的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-09-07 16:28:46

QT WidgetQWidget

2011-09-01 15:51:53

Qt插件VS 2010

2011-08-30 16:02:10

MTK開發(fā)環(huán)境

2011-07-04 15:48:57

Qt 桌面

2011-07-04 11:21:59

QT Designer

2011-06-24 10:54:34

Qt Mysql

2011-06-27 16:59:19

Qt 動(dòng)態(tài) 插件

2011-06-17 10:19:11

Qt QWidge QSetting

2011-06-17 09:58:26

Qt Chapter QObject

2011-06-24 09:13:30

QT SDL

2011-06-24 15:16:33

Qt 插件

2011-08-30 15:32:08

QtQuickQML

2011-06-27 17:24:37

Qt 插件

2011-09-01 14:04:45

QT Webkit插件

2011-06-24 17:05:07

QT QT 4.7.3 windows

2011-06-24 09:39:05

2010-05-18 13:53:34

Subversion插

2011-07-04 17:26:00

Qt SQLite

2011-09-09 17:24:39

Qt Webkit模塊

2011-06-13 15:09:36

插件 Qt Designer
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久精品国产一区二区电影 | 波多野结衣av中文字幕 | 国产在线观看不卡一区二区三区 | 亚洲欧美一区二区三区视频 | 日韩一区欧美一区 | 一区二区三区欧美 | 亚洲精品字幕 | 黄色成人在线网站 | 夜夜骑首页 | 欧美一区二区三区四区五区无卡码 | 日韩欧美国产一区二区 | 国产亚洲一区二区三区 | 成人毛片在线视频 | 最新日韩在线视频 | 男女午夜激情视频 | 国产95在线 | 亚洲精彩视频 | 国产精品不卡一区二区三区 | 天堂中文av | 欧美日韩在线精品 | 一级黄色播放 | 福利二区 | 成人在线影视 | 精品视频在线一区 | 日韩视频在线免费观看 | 精品综合 | a级免费黄色片 | 久久久激情 | 国产精品久久久久久久三级 | 7777在线视频免费播放 | 欧美成人精品一区二区男人看 | 欧美日韩亚洲在线 | 精品国模一区二区三区欧美 | 国产一区二区三区高清 | 天天摸天天干 | 中文字幕爱爱视频 | 欧美日韩综合精品 | 爱爱免费视频 | 福利成人 | 国产精品久久久av | 成人在线视频网 |