QT5.14.2配置QVTKOpenGLNativeWidget控件并在QT中显示VTK窗口

操作系统:win 10
QT: 5.15.2
VTK : 9.1

一、VTK库编译

1、从官网下载vtk 库现在已经更新到9.2.2 了

2、下载Cmake

3、使用Cmake 编译vtk源码

     注意点 :

1、有三个路径,source  build  install 

2、对应Qt的安装位置

 QT5.14.2配置QVTKOpenGLNativeWidget控件并在QT中显示VTK窗口_第1张图片

4、使用vs 生产要bulid 两次,一次是debug  还有一次是release  

二、VTK 库引入QT5.14.2配置QVTKOpenGLNativeWidget控件并在QT中显示VTK窗口_第2张图片

 如何先键的项目是这种情况,那么就说明我们确实vtk 相关的库,我们要在pro 文件中加载库

# VTK
win32:CONFIG(release, debug|release):LIBS += -LD:/pcl_lib/VTK/lib\
                                                -lvtkChartsCore-9.1\
                                                -lvtkCommonColor-9.1\
                                                -lvtkCommonComputationalGeometry-9.1\
                                                -lvtkCommonCore-9.1\
                                                -lvtkCommonDataModel-9.1\
                                                -lvtkCommonExecutionModel-9.1\
                                                -lvtkCommonMath-9.1\
                                                -lvtkCommonMisc-9.1\
                                                -lvtkCommonSystem-9.1\
                                                -lvtkCommonTransforms-9.1\
                                                -lvtkDICOMParser-9.1\
                                                -lvtkDomainsChemistry-9.1\
                                                -lvtkDomainsChemistryOpenGL2-9.1\
                                                -lvtkdoubleconversion-9.1\
                                                -lvtkexodusII-9.1\
                                                -lvtkexpat-9.1\
                                                -lvtkFiltersAMR-9.1\
                                                -lvtkFiltersCore-9.1\
                                                -lvtkFiltersExtraction-9.1\
                                                -lvtkFiltersFlowPaths-9.1\
                                                -lvtkFiltersGeneral-9.1\
                                                -lvtkFiltersGeneric-9.1\
                                                -lvtkFiltersGeometry-9.1\
                                                -lvtkFiltersHybrid-9.1\
                                                -lvtkFiltersHyperTree-9.1\
                                                -lvtkFiltersImaging-9.1\
                                                -lvtkFiltersModeling-9.1\
                                                -lvtkFiltersParallel-9.1\
                                                -lvtkFiltersParallelImaging-9.1\
                                                -lvtkFiltersPoints-9.1\
                                                -lvtkFiltersProgrammable-9.1\
                                                -lvtkFiltersSelection-9.1\
                                                -lvtkFiltersSMP-9.1\
                                                -lvtkFiltersSources-9.1\
                                                -lvtkFiltersStatistics-9.1\
                                                -lvtkFiltersTexture-9.1\
                                                -lvtkFiltersTopology-9.1\
                                                -lvtkFiltersVerdict-9.1\
                                                -lvtkfmt-9.1\
                                                -lvtkfreetype-9.1\
                                                -lvtkGeovisCore-9.1\
                                                -lvtkgl2ps-9.1\
                                                -lvtkglew-9.1\
                                                -lvtkGUISupportQt-9.1\
                                                -lvtkGUISupportQtQuick-9.1\
                                                -lvtkGUISupportQtSQL-9.1\
                                                -lvtkhdf5-9.1\
                                                -lvtkhdf5_hl-9.1\
                                                -lvtkImagingColor-9.1\
                                                -lvtkImagingCore-9.1\
                                                -lvtkImagingFourier-9.1\
                                                -lvtkImagingGeneral-9.1\
                                                -lvtkImagingHybrid-9.1\
                                                -lvtkImagingMath-9.1\
                                                -lvtkImagingMorphological-9.1\
                                                -lvtkImagingSources-9.1\
                                                -lvtkImagingStatistics-9.1\
                                                -lvtkImagingStencil-9.1\
                                                -lvtkInfovisCore-9.1\
                                                -lvtkInfovisLayout-9.1\
                                                -lvtkInteractionImage-9.1\
                                                -lvtkInteractionStyle-9.1\
                                                -lvtkInteractionWidgets-9.1\
                                                -lvtkIOAMR-9.1\
                                                -lvtkIOAsynchronous-9.1\
                                                -lvtkIOCGNSReader-9.1\
                                                -lvtkIOChemistry-9.1\
                                                -lvtkIOCityGML-9.1\
                                                -lvtkIOCONVERGECFD-9.1\
                                                -lvtkIOCore-9.1\
                                                -lvtkIOEnSight-9.1\
                                                -lvtkIOExodus-9.1\
                                                -lvtkIOExport-9.1\
                                                -lvtkIOExportGL2PS-9.1\
                                                -lvtkIOExportPDF-9.1\
                                                -lvtkIOGeometry-9.1\
                                                -lvtkIOHDF-9.1\
                                                -lvtkIOImage-9.1\
                                                -lvtkIOImport-9.1\
                                                -lvtkIOInfovis-9.1\
                                                -lvtkIOIOSS-9.1\
                                                -lvtkIOLegacy-9.1\
                                                -lvtkIOLSDyna-9.1\
                                                -lvtkIOMINC-9.1\
                                                -lvtkIOMotionFX-9.1\
                                                -lvtkIOMovie-9.1\
                                                -lvtkIONetCDF-9.1\
                                                -lvtkIOOggTheora-9.1\
                                                -lvtkIOParallel-9.1\
                                                -lvtkIOParallelXML-9.1\
                                                -lvtkIOPLY-9.1\
                                                -lvtkIOSegY-9.1\
                                                -lvtkIOSQL-9.1\
                                                -lvtkioss-9.1\
                                                -lvtkIOTecplotTable-9.1\
                                                -lvtkIOVeraOut-9.1\
                                                -lvtkIOVideo-9.1\
                                                -lvtkIOXML-9.1\
                                                -lvtkIOXMLParser-9.1\
                                                -lvtkjpeg-9.1\
                                                -lvtkjsoncpp-9.1\
                                                -lvtkkissfft-9.1\
                                                -lvtklibharu-9.1\
                                                -lvtklibproj-9.1\
                                                -lvtklibxml2-9.1\
                                                -lvtkloguru-9.1\
                                                -lvtklz4-9.1\
                                                -lvtklzma-9.1\
                                                -lvtkmetaio-9.1\
                                                -lvtknetcdf-9.1\
                                                -lvtkogg-9.1\
                                                -lvtkParallelCore-9.1\
                                                -lvtkParallelDIY-9.1\
                                                -lvtkpng-9.1\
                                                -lvtkpugixml-9.1\
                                                -lvtkRenderingAnnotation-9.1\
                                                -lvtkRenderingContext2D-9.1\
                                                -lvtkRenderingContextOpenGL2-9.1\
                                                -lvtkRenderingCore-9.1\
                                                -lvtkRenderingFreeType-9.1\
                                                -lvtkRenderingGL2PSOpenGL2-9.1\
                                                -lvtkRenderingImage-9.1\
                                                -lvtkRenderingLabel-9.1\
                                                -lvtkRenderingLOD-9.1\
                                                -lvtkRenderingOpenGL2-9.1\
                                                -lvtkRenderingQt-9.1\
                                                -lvtkRenderingSceneGraph-9.1\
                                                -lvtkRenderingUI-9.1\
                                                -lvtkRenderingVolume-9.1\
                                                -lvtkRenderingVolumeOpenGL2-9.1\
                                                -lvtkRenderingVtkJS-9.1\
                                                -lvtksqlite-9.1\
                                                -lvtksys-9.1\
                                                -lvtkTestingRendering-9.1\
                                                -lvtktheora-9.1\
                                                -lvtktiff-9.1\
                                                -lvtkverdict-9.1\
                                                -lvtkViewsContext2D-9.1\
                                                -lvtkViewsCore-9.1\
                                                -lvtkViewsInfovis-9.1\
                                                -lvtkViewsQt-9.1\
                                                -lvtkWrappingTools-9.1\
                                                -lvtkzlib-9.1

然后执行qmake,并进行编译和运行

QT5.14.2配置QVTKOpenGLNativeWidget控件并在QT中显示VTK窗口_第3张图片

 三、、控件提升(将一个widget 提升为QVTKOpenGLNativeWidget)

首先在UI界面个widget ,布局成水平布局

QT5.14.2配置QVTKOpenGLNativeWidget控件并在QT中显示VTK窗口_第4张图片

 运行看一下,没有问题。

QOpenGLWidget允许在平台支持时使用不同的OpenGL版本和配置文件。只需通过setFormat()设置请求的格式。但在同一窗口中有多个QOpenGLWidget,要求它们都使用相同的格式,或者至少不是环境共享的格式。要解决此问题,使用QSurfaceFormat :: setDefaultFormat(),而不是setFormat()。

注意:在请求OpenGL核心配置文件上下文时,在构造QApplication实例之前调用QSurfaceFormat :: setDefaultFormat()在某些平台(例如,macOS)上是必需的。这是为了确保上下文之间的资源共享保持功能,因为所有内部上下文都是使用正确的版本和配置文件创建的

 vtkPolyData数据生成  vtkPolyDataMapper.h

VTK修炼之道43:图形进阶_vtkPolyData数据生成与显示_沈子恒的博客-CSDN博客

 vtkActor:

表示渲染场景中的对象(几何和属性)。

vtkActor用于表示呈现场景中的实体。它继承了vtkProp中与角色位置和方向相关的函数。actor还具有缩放功能,并维护对定义几何的引用(即、呈现属性,可能还有纹理映射。vtkActor将这些实例变量组合成一个4x4转换矩阵

VTK 学习----VTK对象-演员类_charce_you的博客-CSDN博客_vtkpropassembly

vtk学习记录(三)——初识vtkRenderer - AprilBlank - 博客园

vtkRenderer

 vtkSmartPointer

VTK智能指针——vtkSmartPointer_shaoguang_cn的博客-CSDN博客_vtksmartpointer

VKT宏初始化:

 在使用vtk 之前一定要在前面加上初始化的相关代码,不然程序当中是无法new 出对象的

#include "vtkAutoInit.h"   // vtk初始化的方式
VTK_MODULE_INIT(vtkRenderingOpenGL2);   // 渲染
VTK_MODULE_INIT(vtkInteractionStyle);   // 相互做用方式
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);  //
VTK_MODULE_INIT(vtkRenderingFreeType);
// 获得默认的opengl的配置
   QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat(true));
   vtkNew colors;
   vtkNew shereSource;

   vtkNew shereMapper;
   shereMapper->SetInputConnection(shereSource->GetOutputPort());
   // 声明一个actor 类,然后使用这个类来显示球体
   vtkNew shereActor;
   shereActor->SetMapper(shereMapper);
   // 设置颜色
   shereActor->GetProperty()->SetColor(colors->GetColor4d("Tomato").GetData());
   // 渲染
   vtkNew renderer;
   renderer->AddActor(shereActor);
   renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData());
   // 显示renderer 的窗口
   vtkNew renderwindow;

  renderwindow->AddRenderer(renderer);
  renderwindow->SetWindowName("RenderWindowNoUIFile");


  // 最后开始调用
  QHBoxLayout * hl=new QHBoxLayout(this);
  hl->addWidget(ui->qvtkWidget);
  ui->qvtkWidget->setRenderWindow(renderwindow);
  setLayout(hl);

 QT5.14.2配置QVTKOpenGLNativeWidget控件并在QT中显示VTK窗口_第5张图片

 

你可能感兴趣的:(QT,qt,开发语言)