头文件QVTK.h
#pragma once
#include <QWidget>
#include "ui_QVTK.h"
#include <QFileDialog>
#include <vtkRenderWindow.h>
#include<pcl/io/pcd_io.h>
#include<pcl/point_types.h>
#include<pcl/visualization/pcl_visualizer.h>
class QVTK : public QWidget
{
Q_OBJECT
public:
QVTK(QWidget *parent = Q_NULLPTR);
~QVTK();
private:
Ui::QVTK ui;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
void initialVtkWidget();
private slots:
void onOpen();
};
源文件QVTK.cpp
#include "QVTK.h"
using namespace std;
QVTK::QVTK(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
initialVtkWidget();
}
QVTK::~QVTK()
{
}
void QVTK::initialVtkWidget()
{
cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));
viewer->addPointCloud(cloud, "cloud");
ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow());
viewer->setupInteractor(ui.qvtkWidget->GetInteractor(), ui.qvtkWidget->GetRenderWindow());
ui.qvtkWidget->update();
}
void QVTK::onOpen()
{
QString fileName = QFileDialog::getOpenFileName(this, "Open PointCloud", ".", "Open PCD files(*.pcd)");
pcl::io::loadPCDFile(fileName.toStdString(), *cloud);
viewer->updatePointCloud(cloud, "cloud");
viewer->resetCamera();
ui.qvtkWidget->update();
}
QT中ui界面
实现: