Qt Application的外掛程式開發流程

2021-07-02 21:16:25 字數 1732 閱讀 9080

建立乙個qt的庫專案,刪除自動生成的.h和.cpp檔案,新增乙個介面定義.h檔案和乙個介面實現類(乙個.h乙個.cpp).**如下:

1.介面檔案原始碼

#ifndef plugininte***ce_h

#define plugininte***ce_h

#include

class echointe***ce

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

};qt_begin_namespace

q_declare_inte***ce(echointe***ce, "com.hollysys.plugin.echoint***ce/1.0");

qt_end_namespace

#endif

2.介面實現類標頭檔案

#ifndef plugin_h

#define plugin_h

//#include "plugin_global.h"

#include

#include "plugininte***ce.h"

class plugin : public qobject, echointe***ce

;#endif // plugin_h

3.介面實現類cpp檔案

#include "plugin.h"

#include

plugin::plugin()

plugin::~plugin()

qstring plugin::echo(const qstring &message)

q_export_plugin2("echoplugin", plugin);

編譯生成dll格式的外掛程式.這裡可能會遇到lnk2001錯誤,因為外掛程式介面定義依賴於qt的元資料,而在**中手動新增q_object巨集後,編譯器不會自動為我們生成moc_***x.cpp檔案,因此需要使用命令列生成moc元資料檔案:cmd-->cd 原始碼所在命令 -->moc -o moc_***x.cpp ***x.h.這樣就可以手動建立出moc元資料檔案,解決lnk2001編譯錯誤.

建立乙個gui測試專案,**如下:

#include "test.h"

#include

#include

#include

test::test(qwidget *parent, qt::wflags flags)

: qmainwindow(parent, flags)

test::~test()

void test::buttonclicked()

分析**可見,這裡對所有與exe檔案同目錄的檔案嘗試載入外掛程式,如果載入成功則返回.**實現非常簡潔.在正式開發中可將已載入的外掛程式介面存放在列表中,在需要的時候依次呼叫即可.

另外如果想獲取外掛程式中類定義的元資料,可以使外掛程式介面類從qobject繼承,並使用q_classinfo巨集新增鍵值對,如q_classinfo("author**", "henreash**").並從主程式中使用外掛程式物件元資料獲取這些鍵值對:

const qmetaobject *mo = echointe***ce->metaobject();

for(int i = 0; i < mo->classinfocount(); i++)

使用這個機制可以在定義外掛程式類的時候向主程式傳遞一些特殊資訊.

測試發現,如果在外掛程式介面類中定義乙個靜態變數,那麼這個靜態變數在外掛程式中的位址和在主程式中的位址是不相同的.

插值查詢 插值搜尋

這是一種和二分比較相似的查詢的演算法,不過不同的是,對於分布比較均勻的較大的陣列,插值查詢有時能夠一次就搜尋到位.為什麼能夠這麼快呢 看網上沒有什麼關於這種演算法的描述,我就來描述一下吧.首先要知道一點,這種搜尋方式只能夠針對順序表進行,再乙個要理解順序表中的乙個特點,在順序表中查詢是否存在乙個值,...

軟體插補跟硬體插補的區別

軟體插補跟硬體插補是數控加工中常用的插補方式.其中軟插補常用時間分割法,有個插補週期,然後計算出每個插補週期的脈衝數.硬插補常用逐點比較法,最小偏差法,dda法,其中運動ic晶元mcx314採用的是最小偏差法.軟體插補跟硬體插補的區別主要是精度跟調速的區別 1 軟插補計算簡單,速度調速好.2 硬插補...

學習筆記 單鏈表的頭插 尾插

頭插法 1 頭結點指向賦值為空 2 將新節點插入到原頭節點之後,首節點之前 3頭節點重新指向插入的節點 應用例題 輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。思路 首先建立乙個輔助鍊錶,然後取原鍊錶中的元素,使用頭插法將其插入到新的輔助鍊錶中去,最後就能得到乙個從尾到頭的array...