如何将QVTKWidget嵌入到QT窗体,实现点云的显示?
1.直接通过QT中QtDisigner创建窗体,然后把QVTKWidget控件放进去,这个比较直观,且易操作。但是你先要把QVTKWidgetPlugin.dll和QVTKWidgetPlugin.lib放到QTDesigner目录下。
2.纯代码创建。这个相对来说可能复杂些,但是,后续的操作可能会灵活些(不like QTDesigner的盆友可以用这个)。
//main.cpp
#include <QApplication>
#include <mainwindow.h>
int main (int argc, char * argv[])
{
QApplication mainapp(argc, argv);
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,一起沟通,一起学习,一起加油。