在结合使用Qt和VTK的时候,采用QVTKOpenGLWidget
控件作为结合两者的接口,在Qt界面上创建了一个可以显示vtk图形的窗口。
为了使用这个窗口,假定窗口名为openGLWidget
,用以下代码获得了窗口内的一个renderer
并初始化了窗口。
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkNew<vtkGenericOpenGLRenderWindow> window;
ui.openGLWidget->SetRenderWindow(window);
ui.openGLWidget->GetRenderWindow()->AddRenderer(renderer);
ui.openGLWidget->show();
ui.openGLWidget->GetInteractor()->Initialize();
ui.openGLWidget->GetInteractor()->Start();
发现vtk会自动开启一个警告窗口,提示
QVTKInteractor cannot control the event loop
在[vtkusers] Problem with checkerWidget in VTK+QT页面中找到了答案。原来QVTKOpenGLWidget
会在创建时完成Interactor
创建和开启,保证其对窗口的控制,因此
ui.openGLWidget->GetInteractor()->Initialize();
ui.openGLWidget->GetInteractor()->Start();
这两句话是不必要的。
删除这两句话后,程序不再产生vtk错误窗口。