ctk框架由乙個乙個可分離的外掛程式組成,框架對外掛程式識別有一定要求,目前網上很多一整塊扔出來對新人不太友好,博主這裡講解是盡量拆。單個外掛程式最基本的格式要求分成activator,qrc檔案,以及manifest.mf,我們以生成乙個主介面模組mainwindow為例。
右鍵專案選擇新建子專案-其他專案-empty qmake project
,專案名稱為mainwindow,pro檔案中新增**:
template=lib
target=mainwindow
destdir=$$pwd/../bin/plugins/$$target
qt+=coregui
greaterthan(qt_major_version,4):qt+=widgets
#載入ctk庫
macx:libs
+=-l$$pwd/../libs/-lctkcore.0.1.0
macx:libs
+=-l$$pwd/../libs/-lctkpluginframework.0.1.0
includepath+=$$pwd/../inclues\
+=$$pwd/../includes/core\
+=$$pwd/../includes/pluginframework
includepath+=$$pwd/../libs
dependpath+=$$pwd/../libs
專案中新增c++類mainwindowactivator,**如下:
mainwindowactivator.h
#ifndefmainwindowactivator_h
#definemainwindowactivator_h
#include
#include"ctkpluginactivator.h"
classmainwindowactivator
:public
qobject,
public
ctkpluginactivator
;
#endifmainwindowactivator.cpp//mainwindowactivator_h
#include"mainwindowactivator.h"
#include
mainwindowactivator::mainwindowactivator()
voidmainwindowactivator::start
(ctkplugincontext
*context)
voidactivator是標準的qt外掛程式類,它實現ctkpluginactivatormainwindowactivator::stop
(ctkplugincontext
*context)
的start、stop函式並對外提供介面。我這裡是qt5的版本,所以使用
q_plugin_metadata
申明外掛程式,qt4需要用自己的方法實現外掛程式。
建立外掛程式的資源檔案,格式如下:
外掛程式載入後會尋找同名字首/meta-infmanifest.mf
,所以字首格式固定,將manifest.mf檔案新增進來
menifest.mf檔案內容如下:
plugin-symbolicname:mainwindow
plugin-version:1.0.0
檔案包含ctk外掛程式的基本資訊,只要ctk框架正常識別
到檔案中
plugin-symbolicname
等資訊,則判定它是乙個ctk外掛程式,能夠正常呼叫activator中的start、stop函式。這個檔案需要拷到外掛程式生成路徑下,pro檔案中新增**:
file.path=$$destdir
file.files=manifest.mf
installs+=file
記得在專案構建裡面,加上make引數install
根據以上步驟,乙個ctk外掛程式介面定義基本完成,我們在console專案下呼叫觀察外掛程式是否能夠正常載入。main函式中框架啟動成功後新增以下**:
qstring
dir=
dir+=
"/plugins/mainwindow/libmainwindow.dylib";
qdebug()
<<
dir;
qurl
url=
qurl::fromlocalfile(dir);
qsharedpointer
plugin;
try
catch(ctkpluginexceptione)
trycatch(ctkpluginexception
e)
控制台列印輸出:
"/users/shared/qt/ctkexample/bin/plugins/mainwindow/libmainwindow.dylib"成功呼叫mainwindow中start內列印輸出,則表明ctk外掛程式介面正常定義並能成功載入。其中startmainwindow start
(ctkplugin
::start_transient
)表示立即啟用外掛程式,不設定引數的話載入後也不會立即列印輸出。
小結如果
出現"failed to install plugin",
那真是……太正常了。錯誤資訊由
ctkpluginexception
返回,觀察e.
gettype
()返回引數麼。
如果是0,則表示ctk框架沒有識別到這個外掛程式;檢查載入路徑是否正確,檢查activator宣告外掛程式格式是否規範,檢查activator-qrc-manifest.mf邏輯是否正確。
比較不友好的一點是,外掛程式載入失敗很少提示詳細資訊,對框架不熟悉的人需要花比較多的時間排查問題。
ctk外掛程式基本格式:
menifest.mf檔案:
ctk框架搭建 一 ctk框架外掛程式載入與專案結構
使用ctk框架開發有大半年了,就實際應用上來說框架還比較可靠,但網上資料很少。而剛接觸時專案已經有了相當大的體量,與業務等其他邏輯混淆,現在單獨把ctk框架部分抽離出來做個總結分享,避免後來的人走彎路。該系列介紹簡單的ctk框架構建的方法,具體架構可根據自身專案設計,開發環境為macos high ...
CTK外掛程式 外掛程式之間的依賴
如何實現依賴 在manifest.mf裡,加入元物件 require plugin firstplugin plugin version 0.5,2.0 resolution mandatory firstplugin 為需要依賴的外掛程式名 就是另乙個外掛程式在manifest.mf裡的plugi...
CTK外掛程式框架學習6 註冊介面呼叫
ctkservicereference csref pcontex getservicereference ctkeventadmin eventadmin pcontex getservice csref ctkdictionary cdiry cdiry.insert plug info qst...