VTK中的vtkPlaneWidget显示在QT的qvtkwidget中

如需转载请标明出处:http://blog.csdn.net/itas109

正常情况下,vtkPlaneWidget要显示在vtkRenderWindowInteractor这个渲染窗口交互器中(下图的样子,是一种弹框的方式),但是现在有个任务是要显示在qvtkwidget中。

VTK中的vtkPlaneWidget显示在QT的qvtkwidget中_第1张图片

于是,我就到处搜资料发现主要是vtkPlaneWidget设置的交互器在哪里显示就在哪里显示

上面显示那样就是调用了

vtkRenderWindowInteractor *pInt = vtkRenderWindowInteractor::New();
//...省略
vtkPlaneWidget *pWidget = vtkPlaneWidget::New();
pWidget->SetInteractor(pInt);


 我就想应该是pWidget->SetInteractor(pInt)把pInt这个参数换掉应该就可以了

于是,我注释掉了所有有关pInt的语句

pWin = vtkRenderWindow::New();
//...省略
vtkPlaneWidget *pWidget = vtkPlaneWidget::New();
pWidget->SetInteractor(pWin->GetInteractor());
//...省略
pWidget->On();
//...省略
ui.qvtkWidget->SetRenderWindow(pWin);


更改了参数之后,还是出了一个错误

VTK中的vtkPlaneWidget显示在QT的qvtkwidget中_第2张图片

 ERROR: In ..\..\vtk-5.8.0\Widgets\vtkPlaneWidget.cxx, line 239
vtkPlaneWidget (0B73E550): The interactor must be set prior to enabling/disabling widget

上面说交互器必须在widget使能之前,我们的交互器现在是其实是ui.qvtkWidget,也就是我们应该在下面的语句后面使能vtkPlaneWidget

ui.qvtkWidget->SetRenderWindow(pWin);

我们修改成下面的代码

pWin = vtkRenderWindow::New();
//...省略
ui.qvtkWidget->SetRenderWindow(pWin);
//...省略
vtkPlaneWidget *pWidget = vtkPlaneWidget::New();
pWidget->SetInteractor(pWin->GetInteractor());
//...省略
pWidget->On();

至此,我们就可以在qvtkwidget上显示相关的vtkPlaneWidget了

 如果以后遇到其他的Widget要在qvtkwidget上显示,修改方法也是类似的

 

如需转载请标明出处:http://blog.csdn.net/itas109

 

你可能感兴趣的:(VTK中的vtkPlaneWidget显示在QT的qvtkwidget中)