QT QVTKWidget鼠标滚轮切换单张切片

https://blog.csdn.net/learn_sunzhuli/article/details/45830797

看的是这个博客,用的是vtkcommand.有这个需要的可以看看,我用的不是这个,但是借鉴了一下。

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->resize(800,800);
   
    //ini
    qvtkWidgetLeft = new QVTKWidget(this);
  

   viewer =vtkSmartPointer<vtkImageViewer2>::New();
    viewer->SetInputData(reader->GetOutput());
    viewer->SetSliceOrientationToXY();
    viewer->GetRenderer()->SetBackground(1,1,1);
    
    vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New();
   
    vtkSmartPointer<MyInteractor> style = vtkSmartPointer<MyInteractor>::New();
    style->SetOriImage(reader->GetOutput());
    style->SetViewer(viewer);
    style->SetDim(dims);
    style->SetVtkWidget(qvtkWidgetLeft);
    rwi->SetInteractorStyle( style );
    
    viewer->GetRenderer()->ResetCamera();
    qvtkWidgetLeft->SetRenderWindow(viewer->GetRenderWindow()); //先设置window
    qvtkWidgetLeft->GetRenderWindow()->SetInteractor(rwi);      //再设置window的交互
    qvtkWidgetLeft->GetRenderWindow()->Render();
    
}

Widget::~Widget()
{
    delete ui;

}

class MyInteractor : public vtkInteractorStyleTrackballCamera
{
protected:
    vtkImageViewer2 *Viewer;
   
    static int CurrentSliceNum ;
    int SliceNum ;
    int  Dim[3];
    QVTKWidget* qvtkWidgetLeft;
   
public:
    static MyInteractor* New();
    vtkTypeMacro(MyInteractor, vtkInteractorStyleTrackballCamera);
    
  
    void SetVtkWidget(  QVTKWidget* vtkWidget)
    {
        qvtkWidgetLeft = vtkWidget;
    }
  
    
    void SetViewer(vtkImageViewer2 *viewer)
    {
        this->Viewer = viewer;
    }
   
    void SetDim(int dim[3])
    {
        Dim[0] = dim[0];Dim[1] = dim[1];Dim[2] = dim[2];
        SliceNum = Dim[2];
    }
  
    FastMarchingFilterType::Pointer  fastMarching = FastMarchingFilterType::New();
    NodeType node;
    vtkSmartPointer<vtkRegularPolygonSource> polygonSource = vtkSmartPointer<vtkRegularPolygonSource>::New();
    void OnMouseWheelForward() override
    {
        //+
        if(CurrentSliceNum < SliceNum)
            CurrentSliceNum++;
        this->Viewer->SetSlice(CurrentSliceNum);
        this->Viewer->GetRenderer()->ResetCamera();//need,必须有这个
        qvtkWidgetLeft->GetRenderWindow()->Render();
      
    }
    void OnMouseWheelBackward() override
    {
        //-
        if(CurrentSliceNum >0)
            CurrentSliceNum--;
        this->Viewer->SetSlice(CurrentSliceNum);
        this->Viewer->GetRenderer()->ResetCamera();//need,必须有这个
        qvtkWidgetLeft->GetRenderWindow()->Render();
      
    }
    
    ~MyInteractor(){ }
};
vtkStandardNewMacro(MyInteractor);
int MyInteractor::CurrentSliceNum = 0 ;//must initialize  outside of the class



    
 
  

多说一句:因为我上面用到的是自己定义的style,所以设置交互的时候是这样的:

  qvtkWidgetLeft->SetRenderWindow(viewer->GetRenderWindow()); //先设置window
  qvtkWidgetLeft->GetRenderWindow()->SetInteractor(rwi);      //再设置window的交互

 如果你用的是默认的交互方式,按下面这样的:

viewer->SetupInteractor(qVTK->GetRenderWindow()->GetInteractor()); 
qVTK->SetRenderWindow(viewer->GetRenderWindow());

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值