如何建立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:
class mystyleplugin : public qstyleplugin風格實現; mystyleplugin.cpp
#include "mystyleplugin.h"
qstringlist mystyleplugin::keys() const
qstyle *mystyleplugin::create(const qstring &key)
q_export_plugin2(pnp_mystyleplugin, mystyleplugin)
檔案mystyle.h:
class mystyle : public qwindowsstyle繼承自qwindowsstyle; void polish(qpalette &palette);
};
風格實現
void mystyle::polish(qpalette &palette)(注意其中實現的大小寫方式)。
實現資料庫驅動,影象格式、文字編碼和大多數其他外掛程式型別時,一般不需要建立物件,qt會找到他們並建立他們的物件。style是乙個特例,因為程式中科能會這樣呼叫:
main.c檔案:
int main(int argv, char *args)工程檔案:
template注意,外掛程式需要設定template,因為我們需要的是共享庫而不是執行程式。同時必須設定config。需要將此外掛程式儲存到style資料夾(應用程式所在的資料夾)。這樣應用程式就能夠檢測得到。= lib
config += plugin
headers
= ******style
.h \
******styleplugin.h
sources
= ******style
.cpp \
******styleplugin.cpp
target
= ******styleplugin
底層api:沒有詳細研究
不管是qt本身還是qt應用程式都可以通過外掛程式擴充套件。這需要應用程式檢測並通過qpluginloader進行載入。因此,外掛程式可以提供任意功能,而不僅限於上面說的外掛程式。
外掛程式擴充套件應用包括4個步驟
1、定義外掛程式的介面集(實際上是只有虛函式的乙個類)
2、q_declare_inte***ce巨集告訴meta-object系統此介面的存在。
3、利用qpluginloader載入外掛程式
4、使用qobject_cast()函式測試外掛程式實現的藉口
外掛程式編碼的4個步驟
1、繼承qobject定義乙個外掛程式類,並定義外掛程式需要的介面
2、使用q_inte***ces()巨集告訴meta-object系統介面的存在
3、使用q_export_plugin2()巨集輸出外掛程式
4、編譯工程
例如下面例子:
介面類:
class filterinte***ce //只有虛函式的類外掛程式類,實現介面virtual qstringlist filters()
const= 0
; virtual qimage filterimage(const qstring &filter, const qimage &image,
qwidget *parent) = 0;
};
#include定位外掛程式<
qobject
>
#include
<
qstringlist
>
#include
<
qimage
>
#include
<
plugandpaint
/inte***ces.h
>
class extrafiltersplugin : public qobject, public filterinte***ce
;
qt應用程式自動載入外掛程式,因為外掛程式存在標準外掛程式的子目錄中
開發過程中,外掛程式的目錄在qtdir/plugins中(qdir是qt安裝的目錄)。如果希望應用程式使用或不使用標準外掛程式,安裝會得到希望安裝外掛程式的路徑,並儲存路徑(例如應用程式使用qsettings在啟動時讀取它)
如果希望外掛程式可被載入,一種方法是在應用程式的所在目錄的子目錄下儲存此外掛程式。如果想發布qt自帶的任何外掛程式,需要拷貝plugins的子目錄到應用程式的根目錄下。(而不是包含外掛程式的目錄)
靜態外掛程式
一般的方法是將外掛程式做成動態庫和應用程式一塊發布。外掛程式動態檢測和載入。
應用程式可以靜態鏈結。假如編譯的是靜態的qt庫,那麼靜態外掛程式就是唯一的選擇了。使用靜態外掛程式可以降低錯誤概率。但是缺點是修改外掛程式需要重新編譯整個應用程式。
qt提供一些靜態的外掛程式:
為了靜態鏈結外掛程式,需要在程式中使用q_import_plugin巨集,需要在編譯時使用qtplugin引數。例如,在main.cpp中
#include工程檔案中<
>
#include
<
qtplugin
>
q_import_plugin(qjpeg)
q_import_plugin(qgif)
q_import_plugin(qkrcodecs)
int main(int argc, char *argv)
qtplugin += qjpeg \小結:詳解如何建立qt外掛程式學習教程的內容介紹完了,希望通過本文的學習能對你有所幫助!qgif \
qkrcodecs
from:
如何建立Qt外掛程式
qt提供了兩個用於建立外掛程式的api 編寫擴充套件qt本身的外掛程式是通過對相應的外掛程式基類進行子類化,實現一些功能以及新增巨集來實現的。通過外掛程式不僅可以擴充套件qt本身,而且可以擴充套件qt應用程式。這要求應用程式使用qpluginloader檢測和載入外掛程式。在這種情況下,外掛程式可以...
chrome 外掛程式開發 教程00(如何開發外掛程式)
chrome外掛程式分為兩種 一種是出現在瀏覽器工具欄中的browser actions,另一種就是出現在位址列中的page actions,這兩者的區別是 ba外掛程式的功能對所有的頁面都可以使用,但是pa外掛程式只會對一些特定的頁面位址才會生效的外掛程式,所以它對於不生效的頁面是隱藏不顯示的。a...
Qt學習記錄九之Qt5平台外掛程式建立流程
然後呼叫 init platform qlatin1string platformname platformpluginpath,platformthemename,argc,argv 通過平台外掛程式建立工廠建立 qplatformintegrationfactory create const q...