VTK & QT QVTKWidget自定义鼠标和键盘交互事件

这篇具有很好参考价值的文章主要介绍了VTK & QT QVTKWidget自定义鼠标和键盘交互事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、问题描述

二、代码实现

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

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包