目录
一、问题描述
二、代码实现
1. 自定义鼠标交互事件
2. 移除默认鼠标交互监听事件,塞入自定义监听事件
一、问题描述
在使用VTK显示的过程中,通常会使用QT来进行界面设计。这里通常使用QVTKWidget将VTK的渲染窗口显示到QT的组件中。
QVTKWidget组件自带交互器vtkRenderWindowInteractor和RenderWindow,也有默认的鼠标交互事件,比如比如MouseWheelBackward时,actor缩小,MouseWheelForward时,actor放大;MouseMove时,actor会随之旋转等等,但有时候我们想要自定义的鼠标交互事件,怎么办呢?方法也很简单,只需要先移除原来的监听器中所有的监听事件,重新自定义一个继承自vtkCommand的callback类,将其添加到监听事件里去即可。文章来源:https://www.toymoban.com/news/detail-627586.html
二、代码实现
具体代码实现如下:文章来源地址https://www.toymoban.com/news/detail-627586.html
1. 自定义鼠标交互事件
class vtkImageInteractionCallback : public vtkCommand
{
public:
virtual void Execute(vtkObject *caller, unsigned long event, void *)
{
// 获取交互器
vtkSmartPointer<vtkRenderWindowInteractor> my_interator = vtkRenderWindowInteractor::SafeDownCast(caller);
// 获取交互样式
vtkInteractorStyle *style = vtkInteractorStyle::SafeDownCast(my_interator->GetInteractorStyle());
if( event == vtkCommand::LeftButtonPressEvent )
{
// 自定义操作内容
...
}else if( event == vtkCommand::LeftButtonReleaseEvent )
{
...
}else if( event == vtkCommand::MouseWheelBackwardEvent )
{
if (style)
{
// 执行交互事件
style->OnMouseWheelBackward();
}
}else if( event == vtkCommand::MouseWheelForwardEvent )
{
if (style)
{
style->OnMouseWheelForward();
}
}
}
}
2. 移除默认鼠标交互监听事件,塞入自定义监听事件
// 新建自定义交互类
vtkSmartPointer<vtkImageInteractionCallback> callback = vtkSmartPointer<vtkImageInteractionCallback>::New();
// 移除默认鼠标事件监听
ui->qvtkWidget->GetInteractor()->RemoveAllObservers();
// 添加自定义鼠标交互事件监听
ui->qvtkWidget->GetInteractor()->AddObserver(vtkCommand::LeftButtonPressEvent,callback);
ui->qvtkWidget->GetInteractor()->AddObserver(vtkCommand::LeftButtonReleaseEvent,callback);
ui->qvtkWidget->GetInteractor()->AddObserver(vtkCommand::MouseWheelBackwardEvent,callback);
ui->qvtkWidget->GetInteractor()->AddObserver(vtkCommand::MouseWheelForwardEvent,callback);
到了这里,关于VTK & QT QVTKWidget自定义鼠标和键盘交互事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!