如何将QVTKWidget嵌入到QT窗体,实现点云的显示?

 

1.直接通过QT中QtDisigner创建窗体,然后把QVTKWidget控件放进去,这个比较直观,且易操作。但是你先要把QVTKWidgetPlugin.dll和QVTKWidgetPlugin.lib放到QTDesigner目录下。

如何将PCLVisualizer视窗嵌入到QT窗体? - 石头 - 平平淡淡

2.纯代码创建。这个相对来说可能复杂些,但是,后续的操作可能会灵活些(不like QTDesigner的盆友可以用这个)。

//main.cpp

#include <QApplication>

#include <mainwindow.h>

int main (int argc, char * argv[])

{

  QApplication mainapp(argcargv);

  MainWindow mainwindow;

  mainwindow.show();

  return mainapp.exec();

}

//mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QtCore/qglobal.h>

#if QT_VERSION >= 0x050000

  #include <QtWidgets/QMainWindow>

#else

  #include <QtGui/QMainWindow>

#endif

#include <pcl/visualization/pcl_visualizer.h>

class QVTKWidget;

class MainWindow : public QMainWindow

 public:

  explicit MainWindow (QWidget* parent = 0);

 private:

//创建对象

  QVTKWidget* qvtkWidget;

  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer; 

};

#endif // MAINWINDOW_H

//mainwindow.cpp

#include "mainwindow.h"

#include "QVTKWidget.h"

#include "vtkRenderWindow.h"

MainWindow::MainWindow( QWidget * parent) : QMainWindow( parent )

{

  setWindowTitle( tr("PointCloud"));

//为创建的对象开辟空间

  qvtkWidget = new QVTKWidget(this);

  viewer.reset (new pcl::visualization::PCLVisualizer ("viewer", false));

//这两句代码很重要,至于为何重要,我不是很看的懂,可以一块沟通,

  qvtkWidget->SetRenderWindow (viewer->getRenderWindow ());

  viewer->setupInteractor (qvtkWidget->GetInteractor (), qvtkWidget->GetRenderWindow ());

  setCentralWidget( qvtkWidget );

  qvtkWidget->update ();

}

温馨提示:必要的头文件一定添加的。

#include <pcl/visualization/pcl_visualizer.h>

#include "QVTKWidget.h"

#include "vtkRenderWindow.h"

最开始时,由于没有包含vtkRenderWindow.h头文件,导致出现奇怪的数据。 

点云显示结果为

点云显示效果 

qq:2132591244,一起沟通,一起学习,一起加油。

猜你喜欢

转载自blog.csdn.net/weixin_38403778/article/details/81428473