滚轮滚动时Dicom翻两页的问题解决方法

问题描述:

  公司基于MITK开发的项目,在测试中出现了一个问题,创建病例时,加载Dicom影像后使用滚轮滚动浏览Dicom时,滚轮滚动一下,Dicom翻了两页。

问题定位过程:

   在Debug下对问题进行定位分析,鼠标的滚轮事件根据交互配置文件DisplayInteraction.xml可知对应用的Acttion为ScrollOneUp、ScrollOneDown,在事件处理类DisplayActionEventBroadcast中可找到对应的同名处理函数:

在ScrollOneDown函数中打上断点,进行调试,发现滚动一下时只触发了一次该 函数的调用。

  继续向下追踪,MITK的事件统一由mitk::Dispatcher::ProcessEvent(InteractionEvent *event)处理,在该函数内单步调试发现该事件有两个观察者,并发出两次通知:

导致SliceNavigationController类的SendSlice被调起了两次,从而表现为修改了两次当前位置。

结合项目实现发现,这是由于项目创建病例时为了方便多序列对比启动了mxnmultiwidgetEditor,而在项目中启用该Editor时没有关闭stdmultiwidgetEditor,导致同时注册了两个观察都导致。使用原版MITK应用验证该问题,打开MITK后导入DICOM后,同时打开standard Display和MxN Display, 滚动鼠标滚轮后,DICOM一次翻动两页。

解决方法:

  知道了原因后,解决方法就很简单了,使用一个Editor时,使用CloseEditor()函数关闭另一个即可。示例代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值