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:在实际使用中发现很多事件没有发出来
长风破浪会有时,直挂云帆济沧海!
可通过下方链接找到博主
https://www.cnblogs.com/judes/p/10875138.html