vtk也玩了一个月了,对事件机制总是模模糊糊的,今天整理一下,本文主要是关于style和command的关系。
举个例子,本来你的style就有点击事件,你又通过conmand加了一个点击callback,那么自带的和添加的是什么关系呢,实际上style中的事件和你添加的command没有什么区别,都是command类型的事件,所有的事件保存在一个名称为SubjectHelper当中,当有事件调用时,就会去当中查找,找到就直接调用。
那么目前情况是自带的command与我们定义的command优先调用哪个呢,~~ 实在Addobserver时候有一个priority参数,可以设置优先级,自带command默认优先级是0,
而我们调用Addobserver时缺省第三个参数的话优先级也是0,但是实际上优先调用style中的command(猜测由于style中的是先加入的,所有当优先级相同的时候就调用先加入的)
所以我们可以设定优先级来控制commad的顺序。那么我们想完全覆盖style中的某个cmomand只需要设定高一点的优先级,并且在执行完你自己的命令后,最后加上一句 vtkCommand::AbortFlagOn();(这样style中的command)j就永远不会执行了~~
如果有额外的command添加到style上则覆盖原来style中的事件,如果事件添加到interactor上那么就都会执行(没有提前终止的话)关于执行顺序还没有
对于widget,widget事件默认优先级是0.5,所以widget事件优先于普通事件
vtk事件机制理解
于 2022-10-12 21:47:17 首次发布