【C++】将Qt界面显示到VTK三维环境中

开发环境:win10,vs2017,VTK 8.2.0,Qt 5.11.0

项目的需求是在三维环境下实现UI,最终实现的效果如下:

【C++】将Qt界面显示到VTK三维环境中_第1张图片     【C++】将Qt界面显示到VTK三维环境中_第2张图片

左边是我的Qt窗口在界面设计器中的预览,右边是VTK三维环境下界面的显示。

(为了体现三维环境,我在右下角加了一个圆柱)

 

读到这里,首先你应该具备以下能力才能进行之后的步骤:

1.能将VTK和Qt编译到同一个目录下;

2.熟悉Qt和vtk的基本语法,设计思想。

思路:

关于这个需求,尝试了很多方法,但大部分都失败了。

本项目中使用到的这种方法,不保证是最优的,但确定是可行的。

方法的思路如下:

1.将Qt的界面转换为图片,保存在计算机内存中

2.将图片转为纹理,显示到vtk的平面上

实现:

因为涉及到多个文件,不方便放完整代码,我这里就直接说步骤和使用到的函数。

创建Qt界面图片,

1.首先需要在Qt界面上创一个QWidget,将要显示的部分放到该QWidget中;

2.使用Qt的QPixmap库中的grabWidget函数,将界面映射为一个QPixmap;

3.使用QPixmap库函数toImage将图片转化为QImage格式;

注:2,3部分代码如下

QPixmap::grabWidget(ui->mainWidget).toImage();

4.vtk中创建vtkQImageToImageSource对象,输入QImage图片;

5.创建vtkTexture纹理图,将图片存为纹理;

注:4,5部分代码如下

vtkNewimgTurn;
imgTurn->SetQImage(&img);
	
vtkNewtexture;
texture->SetInputConnection(imgTurn->GetOutputPort());

6.最后,创建一个vtkPlaneSource,并将纹理显示到平面上。

不足:

目前仅仅实现了界面的显示,交互部分正在尝试。

如果实现了交互,我将继续更新此博客。

你可能感兴趣的:(C++,VTK,Qt)