創作內容

0 GP

簡單來說就是白作工了,Qt插件設計

作者:likwueron│2015-05-24 00:05:18│巴幣:0│人氣:255
之前我為了讓讀檔的程式碼更精簡,花了不少時間把實際建構的過程移動到另一個檔案。
而更早之前,為了能解偶合,我也弄了一個簡單的依賴注入。
但就在我把這些鳥工作完成之際,我看到了有關插件的設計
唉,有好幾天的日子都白寫程式了...



Qt的插件系統基本上是簡單工廠模式,聽起來不怎麼樣。
但它之所以能比DI好是因為它可以在執行期間依需求載入。
所以說,今天我們要加入新的物件,只需要開一個小專案,寫相關的程式碼,然後一切就搞定。

設計方式很簡單:首先你要有一個純抽象類別。
完成後你要在header最後加上 Q_DECLARE_INTERFACE([類別全名], [字串])
類別全名要包含其名稱空間,而字串是用來識別用的,所以不能和別人重複。

第二步是實際工作的物件
header檔
class GeometryCtorPlugin : public QObject, public [介面]
{
    Q_OBJECT
    Q_INTERFACES([介面])
public:
    explicit GeometryCtorPlugin(QObject *parent = 0);
};

cpp檔
Q_EXPORT_PLUGIN2([專案名稱], GeometryCtorPlugin)

最後在實際要跑的原始碼中加上
//......
#include <QtPlugin>
#include <QPluginLoader>
//......
Q_IMPORT_PLUGIN([專案名稱])
//......靜態連結
foreach(QObject *plugin, QPluginLoader::staticInstances()) {
    [介面] *interface = qobject_cast<[介面]*>(plugin);
    //......
}
//......動態連結
QDir dir = [插件所在目錄];
foreach(const QString &fileName, dir.entryList(QDir::Files)) {
    QPluginLoader loader(dir.absoluteFilePath(fileName));
    QObject *plugin = loader.instance();
    //......
}
//......

收工
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2845615
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:Qt|程式設計|插件|白作工

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★iqandadie 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:虛空衝鋒槍... 後一篇:不懂的還是不懂,不聽的還...

追蹤私訊切換新版閱覽

作品資料夾

BHSN00000b0n大家
看了《骸骨之城 3 :灰燼之城》這本書看更多我要大聲說昨天08:45


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】