ctk框架搭建 二 ctk外掛程式的介面處理及啟用

2021-08-15 10:09:03 字數 3380 閱讀 3774

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

#ifndef

mainwindowactivator_h

#define

mainwindowactivator_h

#include

#include

"ctkpluginactivator.h"

class

mainwindowactivator

:public

qobject,

public

ctkpluginactivator

;
#endif

//mainwindowactivator_h

mainwindowactivator.cpp

#include

"mainwindowactivator.h"

#include

mainwindowactivator::mainwindowactivator()
void

mainwindowactivator::start

(ctkplugincontext

*context)

void

mainwindowactivator::stop

(ctkplugincontext

*context)

activator是標準的qt外掛程式類,它實現ctkpluginactivator

的start、stop函式並對外提供介面。我這裡是qt5的版本,所以使用

q_plugin_metadata

申明外掛程式,qt4需要用自己的方法實現外掛程式。

建立外掛程式的資源檔案,格式如下:

manifest.mf

外掛程式載入後會尋找同名字首/meta-inf

,所以字首格式固定,將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(ctkpluginexception

e)

trycatch(ctkpluginexception

e)

控制台列印輸出:

"/users/shared/qt/ctkexample/bin/plugins/mainwindow/libmainwindow.dylib"

mainwindow start

成功呼叫mainwindow中start內列印輸出,則表明ctk外掛程式介面正常定義並能成功載入。其中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...