成人免费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)用程序就能夠檢測得到。

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

不管是QT本身還是QT應(yīng)用程序都可以通過插件擴(kuò)展。這需要應(yīng)用程序檢測并通過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ù)測試插件實(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)檢測和加載。

應(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-06-24 09:39:05

2011-09-01 14:04:45

QT Webkit插件

2011-06-24 17:05:07

QT QT 4.7.3 windows

2011-07-04 17:26:00

Qt SQLite

2011-09-09 17:24:39

Qt Webkit模塊

2010-05-18 13:53:34

Subversion插

2011-08-30 15:49:03

QtQuick
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 天堂av影院| 亚洲高清成人在线 | 成人免费在线视频 | 99在线免费观看视频 | 免费亚洲视频 | 国产999精品久久久 精品三级在线观看 | 欧美亚洲国产日韩 | 国产精品揄拍一区二区 | 国产成人在线视频免费观看 | 久久久亚洲一区 | 久久久久久高清 | 99在线视频观看 | 免费黄色的视频 | av毛片| 天天操欧美 | 91九色网站 | 国产精品久久久久久久久久妞妞 | 免费av一区二区三区 | 亚洲91视频| www.99re| 密桃av | 久久久久国产精品 | 亚洲精品视频在线 | 国产精品综合 | 欧美亚洲第一区 | 日日操视频 | 曰韩一二三区 | 亚洲国产精品区 | 成人精品啪啪欧美成 | 国产精品免费在线 | 久久99精品久久久久久 | 久久久做| 中文字幕在线观看一区 | 欧美精品二区三区 | 日韩成人在线播放 | 亚洲精品久久久久久久不卡四虎 | 久久久久亚洲av毛片大全 | 日韩不卡在线 | www.日本在线播放 | 亚洲成人黄色 | 蜜桃精品噜噜噜成人av |