qdialog包含QVTKOpenGLWidget,并且在QVTKOpenGLWidget显示vtkvolume,重置QVTKOpenGLWidget窗口并关闭
QVTKOpenGLWidget *qvtk = m_Controls->openGLWidget;
qvtk->GetRenderWindow()->AddRenderer(render);//render include vtkvolume or vtkactor
qvtk->show();
qvtk->update();
qvtk->GetRenderWindow()->Render();
删除所有render,重置窗口,并关闭dialog
QVTKOpenGLWidget *qvtk = m_Controls->openGLWidget;
vtkRendererCollection* renderers = qvtk->GetRenderWindow()->GetRenderers();
MITK_INFO << "render num: " << renderers->GetNumberOfItems();
renderers->InitTraversal();
vtkRenderer* renderer;
std::vector<vtkRenderer*> renderersToRemove;
while ((renderer = renderers->GetNextItem())) {
// 添加需要移除的渲染器到临时容器中
renderersToRemove.push_back(renderer);
}
// 现在移除所有渲染器
for (vtkRenderer* renderer : renderersToRemove) {
/*renderer->RemoveAllViewProps();
renderer->RemoveAllLights();*/
qvtk->GetRenderWindow()->RemoveRenderer(renderer);
/*vtkActorCollection *actors = renderer->GetActors();
MITK_INFO << " actor num: " << actors->GetNumberOfItems();
actors->InitTraversal();
vtkActor *actor;
while ((actor = actors->GetNextItem())) {
MITK_INFO << "j: " << j;
renderer->RemoveActor(actor);
j++;
}*/
//vtkVolumeCollection* volumes = renderer->GetVolumes();
//volumes->InitTraversal();
//vtkVolume* volume;
//while ((volume = volumes->GetNextItem()))
//{
// //volume->SetVisibility(false);
// renderer->RemoveVolume(volume);
//}
qvtk->GetRenderWindow()->Render();
}
vtkSmartPointer<vtkRenderer> emptyRenderer = vtkSmartPointer<vtkRenderer>::New();
emptyRenderer->SetBackground(0.0, 0.0, 0.0);
qvtk->GetRenderWindow()->AddRenderer(emptyRenderer);
qvtk->GetRenderWindow()->Render();
qvtk->GetRenderWindow()->Frame();
qvtk->GetRenderWindow()->RemoveRenderer(emptyRenderer);
MITK_INFO << "Number of renderers after removal 22222: " << qvtk->GetRenderWindow()->GetRenderers()->GetNumberOfItems();
QCoreApplication::processEvents();//!!!very important
this->reject();
QCoreApplication::processEvents();//!!!非常重要
大概意思dialog关闭时,QVTKOpenGLWidget重置窗口未完成,QCoreApplication::processEvents()把重置窗口这事儿放在后台执行了。
如果添加这句话,dialog再次show时候QVTKOpenGLWidget是没有被重置的状态