CTK-事件監聽


 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:在實際使用中發現很多事件沒有發出來


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM