Qt plugin 的建立和動態載入

2021-06-17 23:28:04 字數 1600 閱讀 3667

plug in 是乙個實現了乙個或多個介面的dll,下面我們將介紹在qt中如何建立plug in 和如何動態載入plug in

首先定義乙個inte***ce,並且用q_declare_inte***ce巨集告知qt meta-object system有這 樣乙個inte***ce,**如下:

class echointe***ce

virtual qstring echo(const qstring &message) = 0;

};qt_begin_namespace

q_declare_inte***ce(echointe***ce,

"com.trolltech.plugin.echointe***ce/1.0");

qt_end_namespace

其次定義乙個plugin的類,必須從inte***ce繼承,並在.h用q_inte***ce告訴meta-object system我們的類支援這樣的inte***ce,具體**如下:

class echoplugin : public qobject, echointe***ce

;

實現這個類並用q_export_plugin2(pluginname,class)匯出這個plugin,具體**如下:

q_export_plugin2(echoplugin, echoplugin);

建立合適的.pro檔案來編譯這個plugin,具體**如下:

template        = lib

config += plugin

includepath += ../echowindow

headers = echoplugin.h

sources = echoplugin.cpp

target = $$qtlibrarytarget(echoplugin)

destdir = ../plugins

其中destdir 指定 dll 生成的路徑,target target的內容必須和q_export_plugin2中的pluginname一致;這樣我們就建立了乙個plug in,接下來我們看下如何動態載入plug in 。

我們通過qpluginloader 來載入 plug in , 具體**如下:

#if defined(q_os_win)

if (pluginsdir.dirname().tolower() == "debug" || pluginsdir.dirname().tolower() == "release")

pluginsdir.cdup();

#elif defined(q_os_mac)

if (pluginsdir.dirname() == "macos")

#endif

pluginsdir.cd("plugins");

foreach (qstring filename, pluginsdir.entrylist(qdir::files))

}這樣我們就完成了 乙個plug in 的建立和呼叫。

file:echoplugin.zip

物件的動態建立和釋放

new 動態地分配記憶體 delet 釋放記憶體 用new建立的物件只能通過指標訪問,建立物件時執行建構函式,有時候會出現記憶體不足,會出現異常。不再需要由new建立的物件時,用delete運算子釋放。否則會造成記憶體洩漏的情況。在釋放記憶體空間之前,自動呼叫析構函式,完成有關善後清理的工作。也就是...

linux 動態庫的建立和使用

動態庫相比動態庫有以下優點 由於不用靜態連線到使用庫的每個程式中,使用動態庫更節省記憶體 公升級方便,公升級動態庫,可以不用重新編譯使用庫的程式 注意 在x86架構下,使用動態庫可能降低效能。中的程式清單,只不過這次我們不生成靜態庫,而是生成動態庫。同時為了方便我們使用makefile檔案。plai...

C 物件的動態建立和釋放

使用類名定義的物件 請檢視 c 類的宣告和物件的定義 都是靜態的,在程式執行過程中,物件所佔的空間是不能隨時釋放的。但有時人們希望在需要用到物件時才建立物件,在不需要用該物件時就撤銷它,釋放它所佔的記憶體空間以供別的資料使用。這樣可提高記憶體空間的利用率。在c 中,可以使用new運算子動態地分配記憶...