首先新建项目,ui中放置一个QOpenGLWidget,提升为QVTKOpenGLNativeWidget,在放置一个QPushbutton,如下图
之后将如下代码复制到项目文件中,注意修改cpp文件中的pcd地址
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <vtkRenderWindow.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <vtkAutoInit.h>
#include <vtkRenderWindow.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <vtkGenericOpenGLRenderWindow.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected slots:
void pushButtonClicked();
private:
Ui::MainWindow *ui;
boost::shared_ptr< pcl::visualization::PCLVisualizer > view;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
renderWindow->AddRenderer(renderer);
view.reset(new pcl::visualization::PCLVisualizer(renderer,renderWindow,"viewer",false));
view->setupInteractor(ui->guiwidget->interactor(),ui->guiwidget->renderWindow());
ui->guiwidget->setRenderWindow(view->getRenderWindow());
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::pushButtonClicked);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::pushButtonClicked() {
//读取pcd文件并显示
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>());//创建点云指针
pcl::io::loadPCDFile("F:rabbit.pcd",*cloud);
view->addPointCloud(cloud,"cloud");
view->resetCamera(); //视角
ui->guiwidget->update();
}
main.cpp
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
运行结果