qt QDialog QVTKOpenGLWidget

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是没有被重置的状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值