国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解如何建立Qt插件學習教程

移動開發
如何建立Qt插件學習教程是本文要介紹的內容,主要是來了解QT中插件的應用,如何來建立,文中有詳解,具體內容的實現來看詳解。

如何建立Qt插件學習教程是本文要介紹的內容,主要是來了解QT插件的應用,如何來建立,文中有詳解,具體內容的實現來看詳解。

QT提供2個API來建立插件

1、高層API擴展QT庫。例如定制的數據庫驅動,圖像格式,字符編碼,custom styles

2、底層API擴展QT應用程序

例如,如果想寫自定義QStyle的子類,并讓應用程序動態加載,需要使用高層API函數

因為高層API在底層API基礎上構造,兩者需要注意一些問題。

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

高層API

利用繼承特定的基類來實現插件,需要實現其中的一些函數,并增加一個宏

QT中有不少插件的基類可供使用,繼承的插件默認保存在標準插件目錄的子目錄下,否則Qt會找不到。

設計一個style類名為MyStyle的插件

文件mystyleplugin.h:

  1. class MyStylePlugin : public QStylePlugin  
  2. {  
  3. public:  
  4. QStringList keys() const;    //返回此插件能夠使用的style名稱列表。  
  5. QStyle *create(const QString &key);//根據傳入的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) 

風格實現

文件mystyle.h:

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

繼承自QWindowsStyle

風格實現

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

(注意其中實現的大小寫方式)。

實現數據庫驅動,圖像格式、文本編碼和大多數其他插件類型時,一般不需要建立對象,Qt會找到他們并建立他們的對象。Style是一個特例,因為程序中科能會這樣調用:

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

main.c文件:

  1. int main(int argv, char *args[])  
  2. {  
  3. QApplication app(argv, args);//QT此時加載了插件  
  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 

注意,插件需要設置TEMPLATE,因為我們需要的是共享庫而不是執行程序。同時必須設置CONFIG。需要將此插件保存到style文件夾(應用程序所在的文件夾)。這樣應用程序就能夠檢測得到。

底層API:沒有詳細研究

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

插件擴展應用包括4個步驟

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

2、Q_DECLARE_INTERFACE宏告訴meta-object系統此接口的存在。

3、利用QPluginLoader加載插件

4、使用qobject_cast()函數測試插件實現的借口

插件編碼的4個步驟

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

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

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

4、編譯工程

例如下面例子:

接口類:

  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. #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應用程序自動加載插件,因為插件存在標準插件的子目錄中

開發過程中,插件的目錄在QTDIR/plugins中(QDIR是QT安裝的目錄)。如果希望應用程序使用或不使用標準插件,安裝會得到希望安裝插件的路徑,并保存路徑(例如應用程序使用QSettings在啟動時讀取它)

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

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

靜態插件

一般的方法是將插件做成動態庫和應用程序一塊發布。插件動態檢測和加載。

應用程序可以靜態鏈接。假如編譯的是靜態的QT庫,那么靜態插件就是唯一的選擇了。使用靜態插件可以降低錯誤概率。但是缺點是修改插件需要重新編譯整個應用程序。

QT提供一些靜態的插件:

為了靜態鏈接插件,需要在程序中使用Q_IMPORT_PLUGIN宏,需要在編譯時使用QTPLUGIN參數。例如,在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 

小結:詳解如何建立Qt插件學習教程的內容介紹完了,希望通過本文的學習能對你有所幫助!

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

2011-09-07 16:28:46

QT WidgetQWidget

2011-09-01 15:51:53

Qt插件VS 2010

2011-08-30 16:02:10

MTK開發環境

2011-07-04 15:48:57

Qt 桌面

2011-07-04 11:21:59

QT Designer

2011-06-27 16:59:19

Qt 動態 插件

2011-06-24 10:54:34

Qt Mysql

2011-06-24 15:16:33

Qt 插件

2011-06-17 10:19:11

Qt QWidge QSetting

2011-06-17 09:58:26

Qt Chapter QObject

2011-08-30 15:32:08

QtQuickQML

2011-06-24 09:13:30

QT SDL

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-08-30 15:49:03

QtQuick
點贊
收藏

51CTO技術棧公眾號

在线观看日韩高清av| 亚洲欧美日韩精品久久奇米色影视 | 国产精品电影观看| 最新日韩一区| 欧美系列亚洲系列| 蜜桃臀av在线| 国产亚洲精品资源在线26u| 中文字幕一区综合| 日本视频一区二区三区| 国产精品久久久久久久小唯西川 | 50路60路老熟妇啪啪| 极品尤物av久久免费看| 欧洲亚洲一区| 国产欧美不卡| 成人av中文| 韩国精品一区二区三区| 国产91视觉| 欧美日韩理论| 91麻豆蜜桃| 亚洲欧洲午夜| 精品视频导航| 日韩av在线发布| 影音先锋男人的网站| 国产一区二区毛片| 精品一区二区三区无码视频| 菠萝蜜视频在线观看一区| 成人黄色片视频| 国产精品电影一区二区| 有码av在线| 欧美三级一区二区| 国产美女福利在线观看| 亚洲网站视频福利| 精品三级国产| 国产精品第2页| 亚洲一级影院| 超碰97免费观看| 国产日韩v精品一区二区| 一级片a一级片| 欧美日韩国产电影| 中文字幕影音在线| 韩剧1988在线观看免费完整版 | 欧美日产国产成人免费图片| 台湾亚洲精品一区二区tv| 成人福利视频在线观看| 美女精品在线观看| 每日在线观看av| 亚洲日本va午夜在线影院| 天堂аⅴ在线最新版在线 | 亚洲一区成人| 91精品国产毛片武则天| 成人激情免费电影网址| 成人午夜剧场免费观看完整版| 亚洲精品成人精品456| 日本v片在线免费观看| 日韩午夜三级在线| 伊人亚洲精品| 99www免费人成精品| 韩国欧美国产1区| 色免费在线视频| 欧美日韩成人一区二区| 日韩久久一区| 亚洲a区在线视频| 麻豆freexxxx性91精品| 中文字幕国产免费| 欧美日韩亚洲丝袜制服| 久久夜夜久久| 亚洲一区二区三区在线免费观看| 极品销魂美女一区二区三区| 四虎4hu新地址入口2023| 欧美久久一二区| 亚洲成人影音| 欧美国产综合视频| 亚洲欧洲精品天堂一级| 不卡av免费观看| 国产不卡精品视男人的天堂| 亚洲一区网站| 天天激情综合| 亚洲精品久久久久久久久久久| 亚洲区小说区| 一道本在线观看视频| 色综合天天综合网国产成人综合天 | av不卡免费看| 国产日韩成人内射视频| 欧美精品aⅴ在线视频| 一区二区三区亚洲变态调教大结局 | 国产中文字幕日韩| 国产乱码精品一区二区三区av| 天堂中文av| 国产一区二区三区高清在线观看| 日韩av自拍| 男女午夜激情视频| 欧美精品一区二区三区蜜桃| 成人久久电影| 人妻精品无码一区二区三区| 欧美一区二区在线看| 精品在线手机视频| 国产中文字幕视频在线观看| 欧美日韩国产电影| 欧洲杯足球赛直播| 高清在线观看免费| 日韩精品中文字| 亚洲精品少妇| 一本大道香蕉8中文在线视频| 欧美区二区三区| 狠狠色狠狠色综合日日91app| wwwxxx在线观看| 国产美女精彩久久| 日本一区二区久久| av成人在线播放| 一区二区精品免费视频| 欧美日韩一区视频| 亚洲一级淫片| 屁屁影院在线观看| 国产精品91一区| 国产精品白丝在线| 国产美女撒尿一区二区| 国产日韩一区二区在线| 亚洲欧美另类人妖| 另类人妖一区二区av| 色操视频在线| 亚洲第一导航| 亚洲精品黄网在线观看| 亚洲一区亚洲| 成人高清免费在线| 国严精品久久久久久亚洲影视| 五月天激情小说综合| 免费观看久久av| 少妇免费视频| 成人在线播放av| 狠狠色狠色综合曰曰| 亚洲天天影视网| 国际av在线| 裸模一区二区三区免费| 91麻豆精品国产自产在线 | 国产亚洲va综合人人澡精品| 午夜精品久久久久久毛片| 亚洲乱码日产精品bd在线观看| 亚洲欧美日韩直播| 成人中文字幕在线| 在线观看欧美| 成人亚洲精品777777大片| 91成人国产在线观看| 亚洲国产一区二区三区| 91超碰成人| 国产福利视频在线| 女女同性女同一区二区三区按摩| 国产一区二区美女视频| 99国产精品国产精品毛片| 国产suv精品一区| 欧美著名女优| 精品亚洲一区二区三区四区五区高| 精品视频在线视频| 日韩av中文在线观看| 成人做爰视频www网站小优视频| 欧美,日韩,国产在线| 97在线精品国自产拍中文| 午夜视频一区二区| 中文亚洲免费| 国产精品高清乱码在线观看| 男操女免费网站| 国产久一一精品| 欧美成人乱码一区二区三区| 成人性视频网站| 国产欧美日韩精品一区二区免费 | 91亚洲国产成人精品一区二区三| 亚洲精品一区国产| 宅男深夜免费观看视频| 国产精品免费一区二区三区| 亚洲精品成人av| 中文字幕 久热精品 视频在线| 久久久久av| 欧美羞羞视频| 美女做a视频| 四虎影视永久免费在线观看一区二区三区| 一区二区三区精品99久久 | 日本视频一二区| 久久日韩精品| 日韩中文字幕国产| 欧美日韩人人澡狠狠躁视频| 日韩精品一区第一页| 日韩欧美中文字幕一区二区三区| 久草在线资源视频| 最新国产精品久久| 日韩免费av一区二区| 亚洲精品在线免费观看视频| 久久先锋影音av| 精品96久久久久久中文字幕无| 韩国三级一区| 免费一级在线观看| 91免费国产精品| 国产日韩综合一区二区性色av| 日韩精品亚洲元码| 五月天一区二区三区| 国产aⅴ综合色| 欧美在线日韩| 日韩成人久久| 91白丝在线| 久久99久久| 99热播在线观看| 狠狠干视频网站|