如需转载请标明出处:http://blog.csdn.net/itas109
正常情况下,vtkPlaneWidget要显示在vtkRenderWindowInteractor这个渲染窗口交互器中(下图的样子,是一种弹框的方式),但是现在有个任务是要显示在qvtkwidget中。
于是,我就到处搜资料发现主要是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);
更改了参数之后,还是出了一个错误
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