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