项目的需求是在三维环境下实现UI,最终实现的效果如下:
左边是我的Qt窗口在界面设计器中的预览,右边是VTK三维环境下界面的显示。
(为了体现三维环境,我在右下角加了一个圆柱)
读到这里,首先你应该具备以下能力才能进行之后的步骤:
1.能将VTK和Qt编译到同一个目录下;
2.熟悉Qt和vtk的基本语法,设计思想。
关于这个需求,尝试了很多方法,但大部分都失败了。
本项目中使用到的这种方法,不保证是最优的,但确定是可行的。
方法的思路如下:
1.将Qt的界面转换为图片,保存在计算机内存中
2.将图片转为纹理,显示到vtk的平面上
因为涉及到多个文件,不方便放完整代码,我这里就直接说步骤和使用到的函数。
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,并将纹理显示到平面上。
目前仅仅实现了界面的显示,交互部分正在尝试。
如果实现了交互,我将继续更新此博客。