詳解 Qt 動(dòng)態(tài)插件編寫要點(diǎn)
Qt 動(dòng)態(tài)插件編寫要點(diǎn)是本文要介紹的內(nèi)容,有介紹Qt插件在.pro工程文件中的內(nèi)容,不多說(shuō)了,先來(lái)看內(nèi)容。
一、編寫插件的四個(gè)步驟
1. 聲明一個(gè)插件類。
2. 實(shí)現(xiàn)插件提供的接口。
3. 使用Q_EXPORT_PLUGIN2() 宏導(dǎo)出插件。
4. 使用一個(gè)適當(dāng)?shù)?pro工程文件構(gòu)建插件。
二、聲明插件類
我們繼承QObject和接口類(interface類)兩個(gè)類來(lái)構(gòu)造這個(gè)插件類。Q_INTERFACES宏告知Qt這個(gè)類實(shí)現(xiàn)的是哪個(gè)接口。如:
- Q_INTERFACES(FilterInterface)
三、實(shí)現(xiàn)插件提供的接口
在插件類的實(shí)現(xiàn)文件中實(shí)現(xiàn)插件所提供的接口,供調(diào)用。
四、導(dǎo)出插件
在插件接口實(shí)現(xiàn)文件中,我們使用Q_EXPORT_PLUGIN2宏讓Qt知道該類是一個(gè)插件。如:
- Q_EXPORT_PLUGIN2(pnp_extrafilters, ExtraFiltersPlugin);
***個(gè)參數(shù)是插件的名字;通常給予插件和其生成的目標(biāo)庫(kù)文件(.pro中TARGET變量所賦的名字)有著相同的名字。
五、動(dòng)態(tài)插件的 .pro工程文件
Here’s the project file for building the Extra Filters plugin:
TEMPLATE = lib //模塊設(shè)置,lib指生成庫(kù)文件,app指生成應(yīng)用程序(默認(rèn))
CONFIG += plugin //CONFIG用來(lái)告訴qmake關(guān)于應(yīng)用程序的配置信息,靜態(tài)插就添加為plugin static。
INCLUDEPATH += ../.. //INCLUDEPATH變量設(shè)置全局頭文件的尋找路徑(例如使用
#include <…>包含的頭文件) “.”當(dāng)前目錄,”..”上一層目錄。(在這里是為了能夠添加接口定義文件interface.h)
HEADERS = extrafiltersplugin.h //工程中包含的頭文件
SOURCES = extrafiltersplugin.cpp //工程中包含的源文件
TARGET = $$qtLibraryTarget(pnp_extrafilters) //TARGET變量指定生成的目標(biāo)庫(kù)文件的名字,生成應(yīng)用程序時(shí)即指定生成應(yīng)用程序名
通常TARGET和插件(由Q_EXPORT_PLUGIN2設(shè)置)擁有相同的名字。
DESTDIR = ../../plugandpaint/plugins //DESTDIR變量指定我們要安裝(生成)
插件的地方,即指定放置生成的應(yīng)用程序(插件)的目錄。
用藍(lán)色字體顯示的表示根據(jù)具體應(yīng)用程序會(huì)做相應(yīng)改變。
六、接口的定義
接口類定義了插件所提供的函數(shù)。一個(gè)接口是一個(gè)只由純虛函數(shù)組成的類。
我們使用Q_DECLARE_INTERFACE宏讓Qt的元對(duì)象系統(tǒng)(meta object system)注意到接口。如:
- Q_DECLARE_INTERFACE(FilterInterface, "com.trolltech.PlugAndPaint.FilterInterface/1.0");
這樣做才有可能在運(yùn)行時(shí)識(shí)別插件并實(shí)現(xiàn)接口。第二個(gè)參數(shù)是一個(gè)必須以唯一的方式識(shí)別接口的字符串。
注:Qt Creator編譯鏈接后會(huì)將可執(zhí)行文件生成到一個(gè)projectname_build_desktop的目錄中,如想要生成的文件生成在源代碼所在目錄下,方法如下:
選擇Qt Creator左邊的“Project”標(biāo)簽,General欄目中有一個(gè)選擇框“Shadow Build”,取消即可。
Shadow Build也就是使構(gòu)建生成的目錄和源代碼目錄分開(kāi),可根據(jù)自己的使用習(xí)慣設(shè)置。
七、插件Qt工程文件.pro往Visual Studio 2005中的移植
Qt插件的.pro工程文件中,會(huì)包含構(gòu)建插件所需的特定配置信息,在VS 2005中寫插件程序時(shí),需要在工程屬性中進(jìn)行對(duì)應(yīng)配置,才能順利生成動(dòng)態(tài)插件。
注:在Qt或VS 2005中編寫Qt插件程序,都是建立Qt C++的控制臺(tái)應(yīng)用程序工程。
以下是Qt Creator中.pro文件和VS 2005中配置信息的對(duì)應(yīng)實(shí)現(xiàn)關(guān)系:
1、TEMPLATE = lib VS中對(duì)應(yīng)設(shè)置:工程屬性配置屬性常規(guī)項(xiàng)目默認(rèn)值配置類型其值改為 動(dòng)態(tài)庫(kù)(.dll)
2、CONFIG += plugin 這個(gè)貌似在VS中沒(méi)有配置的地方
3、INCLUDEPATH += . VS中對(duì)應(yīng)設(shè)置:工程屬性配置屬性C/C++常規(guī)附加包含目錄中其值在***添加.,即當(dāng)前路徑。
4、SOURCES += \ helloworldplugin.cpp
5、HEADERS += \ helloworldplugin.h
6、TARGET = $$qtLibraryTarget(helloworld) DESTDIR = ./plugin VS中對(duì)應(yīng)設(shè)置:工程屬性配置屬性鏈接器 輸出文件將其值改為 plugin\helloworld.dll
小結(jié):詳解 Qt 動(dòng)態(tài)插件編寫要點(diǎn)的內(nèi)容介紹完了,希望本篇文章對(duì)你有幫助?。?!