1、首先在Qt Designer創(chuàng)建UI后,拖一個Widget窗口出來
2、在對象查看器中右擊該Widget,選擇提升窗口部件,如下操作:
3、把UI轉(zhuǎn)出來放在VS項目中,其中你的UI代碼頭文件會自帶QVTKOpenGLNativeWidget.h,當(dāng)然你的VS屬性環(huán)境得配置好VTK的環(huán)境,QVTKOpenGLNativeWidget.h在VTK\include\vtk-9.1路徑下;詳細(xì)操作參考其它博客;
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窗口出現(xiàn)警告,在項目的.CPP文件中加上:
vtkObject::GlobalWarningDisplayOff(); //不顯示警告彈窗
此處可能用不上,如果彈了警告窗再加上;
6、在項目的.CPP文件中加上如下內(nèi)容,初始化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());
本文代碼因某些原因,全部手敲的...如果出現(xiàn)打錯的地方請指出。
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、實現(xiàn)效果:
文章來源:http://www.zghlxwxcb.cn/news/detail-719629.html
--tip:由于代碼都是在csdn網(wǎng)頁手敲的,可能會有打錯的,發(fā)現(xiàn)問題麻煩留言提醒一下我謝謝!文章來源地址http://www.zghlxwxcb.cn/news/detail-719629.html
到了這里,關(guān)于在Qt創(chuàng)建的UI中放一個顯示點云的窗口(PCL+QT5)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!