CTK一共有三種事件可以監聽:框架事件、插件事件、服務事件。但是這些事件只有再變化時才能監聽到,如果已經變化過后,進入一個穩定的狀態,這時才去監聽,那么是無法監聽到的。
1、監聽接口
主要是ctkPluginContext提供的三個函數:



2、如何使用
可以新建一個專門的服務,專門用於監聽CTK的事件變化;也可以依附於某個特定的服務【如日志服務】,當事件變化后就使用事件信息
3、代碼
這里以在日志服務里綁定事件的監聽,在日志實現類構造函數【或者激活類中】:
LogService::LogService(ctkPluginContext* context) :context(context) { context->connectFrameworkListener(this, SLOT(onFrameworkEvent(ctkPluginFrameworkEvent))); context->connectPluginListener(this, SLOT(onPluginEvent(ctkPluginEvent))); // QString filter = QString("(%1=%2)").arg(ctkPluginConstants::OBJECTCLASS).arg("org.commontk.eventadmin");// 過濾 ctkEventAdmin 服務 // context->connectServiceListener(this,SLOT(onServiceEvent(ctkServiceEvent))); //, filter); context->connectServiceListener(this,"onServiceEvent"); //, filter); }
注意:最后一個服務事件connectServiceListener是比較奇怪的,它的原型是這樣

但是第二個參數就只能是個槽函數的字符串,試過SLOT(..)的形式,但是報錯了,注意一下就行。
4、運行現象

ps:
①、框架事件
針對整個框架的,相當於只有一個,因為框架只有一個,但是這里有個問題,就是監聽這個事件是在框架初始化之后的,所以根本沒法監聽到框架事件的初始化,只能監聽到結束的事件。
類型有
FRAMEWORK_STARTED
PLUGIN_ERROR
PLUGIN_WARNING
PLUGIN_INFO
FRAMEWORK_STOPPED
FRAMEWORK_STOPPED_UPDATE
FRAMEWORK_WAIT_TIMEDOUT
②、服務事件
在創建、回收插件時的事情,主要體現在服務的注冊和注銷
類型有
REGISTERED
MODIFIED
MODIFIED_ENDMATCH
UNREGISTERING
③、插件事件
在安裝、啟動插件的過程中呈現的,主要就是插件的一個狀態的變化
類型有
INSTALLED
RESOLVED
LAZY_ACTIVATION
STARTING
STARTED
STOPPING
STOPPED
UPDATED
UNRESOLVED
UNINSTALLED
ps:在實際使用中發現很多事件沒有發出來
