1、首先在Qt Designer创建UI后,拖一个Widget窗口出来
2、在对象查看器中右击该Widget,选择提升窗口部件,如下操作:
3、把UI转出来放在VS项目中,其中你的UI代码头文件会自带QVTKOpenGLNativeWidget.h,当然你的VS属性环境得配置好VTK的环境,QVTKOpenGLNativeWidget.h在VTK\include\vtk-9.1路径下;详细操作参考其它博客;
4、在项目的.h头文件中增加:
- //vtk窗口的
- #include <vtkRenderer.h>
- #include <vtkRenderWindow.h>
- #include <vtkGenericOpenGLRenderWindow.h>
- #include <pcl/visualization/pcl_visualizer.h>
-
- //pcl加载点云的
- #include <pcl/io/pcd_io.h>
- private:
- pcl::visualization::PCLVisualizer::Ptr viewer; //初始化一个viewer
5、防止VTK窗口出现警告,在项目的.CPP文件中加上:
vtkObject::GlobalWarningDisplayOff(); //不显示警告弹窗
此处可能用不上,如果弹了警告窗再加上;
6、在项目的.CPP文件中加上如下内容,初始化QVTKOpenGLNatiaveWidget那个窗口,窗口的名字是自定义的,我这里叫做widget_opengl。
- auto renderer = vtkSmartPointer<vtkRenderer>::New();
- auto renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
- renderWindow->AddRenderer(renderer);
- viewer.reset(new pcl::visualization::PCLVisualizer(renderer,renderWindow,"viewer",false));
- ui->widget_opengl->setRenderWindow(viewer->getRenderWindow()); //此处widget_opengl是我这个窗口的名称,自定义的
- viewer->setopInteractor(ui->widget_opengl->interactor(),ui->widget_opengl->renderWindow());
本文代码因某些原因,全部手敲的...如果出现打错的地方请指出。
7、显示点云
- //初始化一个点云
- pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
-
- //加载点云文件
- if(pcl::io::loadPCDFile("cloud.pcd",*cloud)==-1)
- {
- //此处cloud.pcd是你的点云文件
- }
-
- //刷新显示窗口
- ui->widget_opengl->repaint();
- //添加点云
- viewer->addPointCloud(cloud,"cloud");
- //刷新
- ui->widget_opengl->update();
- //视角
- viewer->resetCamera();
8、实现效果:
--tip:由于代码都是在csdn网页手敲的,可能会有打错的,发现问题麻烦留言提醒一下我谢谢!