VTK笔记-Qt5.12.11编译VTK9.0.3-QVTKOpenGLNativeWidget

  在学习VTK的过程中,使用的是控制台的方式来实现VTK的功能。多次调整参数就需要多次的编译,十分不便。想着使用界面化的方式来学习VTK会事半功倍,且能掌握一门GUI方面的技能。

编译VTK

  使用VTK最新发布版本9.0.3,在编译过程中增加了Qt的配置;
  由于当前机器上没有VS2019,就使用了VS2017版本;选择x64;
在这里插入图片描述
  Finsih后,在Search中搜索Qt,列表中出现和Qt相关的配置项,我这里将所有的选项设置为“YES”;
在这里插入图片描述
  还可以开启使用VTK_USE_LARGE_DATA,使用大数据文件;
  使用CMAKE_INSTALL_PREFIX设置项目INSTALL的输出目录;
  Configure后,出现Error提示框,需要配置Qt5的路径;
在这里插入图片描述在这里插入图片描述
  Qt5_DIR是Qt5环境的编译lib的cmake所在文件夹位置;
  我的Qt5_DIR位置是:C:/Qt/5.12.11/msvc2017_64/lib/cmake/Qt5;
在这里插入图片描述
  再次Configure后,出现红色选项:
在这里插入图片描述
  确认位置是否正确,一般不用管都是对的,直接Configure;
  后面的步骤都和其他Cmake的步骤是一样的,批生成等等。

Qt下使用VTK

Qt如何使用VTK

  之前版本中,官方仅提供QVTKWidget,需要手动将QVTKWidgetPlugin.dll和QVTKWidgetPlugin.lib放到qt design下的plugin里。
  在Qt版本为5.4之后时,在VTK8.2之前的版本,一般是使用QVTKOpenGLWidget;在VTK8.2及之后的版本里,引入了QVTKOpenGLNativeWidget;

pro配置VTK

  在pro项目文件中增加VTK库的使用,引入VTK头文件路径和lib库文件路径以及文件名列表;
  编写一个.bat文件,放在lib文件下,运行后,就把所有lib文件写入src.txt文件中,方便以后使用;

dir /a-d /b *.lib>src.txt

  我现在使用的配置,以供参考:

INCLUDEPATH+="G:/code/VTK-out/x64/Debug/include/vtk-9.0/"
LIBS+= -L$$quote("G:/code/VTK-out/x64/Debug/lib/")
LIBS+=vtkChartsCore-9.0d.lib\
vtkCommonColor-9.0d.lib\
vtkCommonComputationalGeometry-9.0d.lib\
vtkCommonCore-9.0d.lib\
vtkCommonDataModel-9.0d.lib\
vtkCommonExecutionModel-9.0d.lib\
vtkCommonMath-9.0d.lib\
vtkCommonMisc-9.0d.lib\
vtkCommonSystem-9.0d.lib\
vtkCommonTransforms-9.0d.lib\
vtkDICOMParser-9.0d.lib\
vtkDomainsChemistry-9.0d.lib\
vtkDomainsChemistryOpenGL2-9.0d.lib\
vtkdoubleconversion-9.0d.lib\
vtkexodusII-9.0d.lib\
vtkexpat-9.0d.lib\
vtkFiltersAMR-9.0d.lib\
vtkFiltersCore-9.0d.lib\
vtkFiltersExtraction-9.0d.lib\
vtkFiltersFlowPaths-9.0d.lib\
vtkFiltersGeneral-9.0d.lib\
vtkFiltersGeneric-9.0d.lib\
vtkFiltersGeometry-9.0d.lib\
vtkFiltersHybrid-9.0d.lib\
vtkFiltersHyperTree-9.0d.lib\
vtkFiltersImaging-9.0d.lib\
vtkFiltersModeling-9.0d.lib\
vtkFiltersParallel-9.0d.lib\
vtkFiltersParallelImaging-9.0d.lib\
vtkFiltersPoints-9.0d.lib\
vtkFiltersProgrammable-9.0d.lib\
vtkFiltersSelection-9.0d.lib\
vtkFiltersSMP-9.0d.lib\
vtkFiltersSources-9.0d.lib\
vtkFiltersStatistics-9.0d.lib\
vtkFiltersTexture-9.0d.lib\
vtkFiltersTopology-9.0d.lib\
vtkFiltersVerdict-9.0d.lib\
vtkfreetype-9.0d.lib\
vtkGeovisCore-9.0d.lib\
vtkgl2ps-9.0d.lib\
vtkglew-9.0d.lib\
vtkGUISupportQt-9.0d.lib\
vtkGUISupportQtSQL-9.0d.lib\
vtkhdf5-9.0d.lib\
vtkhdf5_hl-9.0d.lib\
vtkImagingColor-9.0d.lib\
vtkImagingCore-9.0d.lib\
vtkImagingFourier-9.0d.lib\
vtkImagingGeneral-9.0d.lib\
vtkImagingHybrid-9.0d.lib\
vtkImagingMath-9.0d.lib\
vtkImagingMorphological-9.0d.lib\
vtkImagingSources-9.0d.lib\
vtkImagingStatistics-9.0d.lib\
vtkImagingStencil-9.0d.lib\
vtkInfovisCore-9.0d.lib\
vtkInfovisLayout-9.0d.lib\
vtkInteractionImage-9.0d.lib\
vtkInteractionStyle-9.0d.lib\
vtkInteractionWidgets-9.0d.lib\
vtkIOAMR-9.0d.lib\
vtkIOAsynchronous-9.0d.lib\
vtkIOCityGML-9.0d.lib\
vtkIOCore-9.0d.lib\
vtkIOEnSight-9.0d.lib\
vtkIOExodus-9.0d.lib\
vtkIOExport-9.0d.lib\
vtkIOExportGL2PS-9.0d.lib\
vtkIOExportPDF-9.0d.lib\
vtkIOGeometry-9.0d.lib\
vtkIOImage-9.0d.lib\
vtkIOImport-9.0d.lib\
vtkIOInfovis-9.0d.lib\
vtkIOLegacy-9.0d.lib\
vtkIOLSDyna-9.0d.lib\
vtkIOMINC-9.0d.lib\
vtkIOMotionFX-9.0d.lib\
vtkIOMovie-9.0d.lib\
vtkIONetCDF-9.0d.lib\
vtkIOOggTheora-9.0d.lib\
vtkIOParallel-9.0d.lib\
vtkIOParallelXML-9.0d.lib\
vtkIOPLY-9.0d.lib\
vtkIOSegY-9.0d.lib\
vtkIOSQL-9.0d.lib\
vtkIOTecplotTable-9.0d.lib\
vtkIOVeraOut-9.0d.lib\
vtkIOVideo-9.0d.lib\
vtkIOXML-9.0d.lib\
vtkIOXMLParser-9.0d.lib\
vtkjpeg-9.0d.lib\
vtkjsoncpp-9.0d.lib\
vtklibharu-9.0d.lib\
vtklibproj-9.0d.lib\
vtklibxml2-9.0d.lib\
vtkloguru-9.0d.lib\
vtklz4-9.0d.lib\
vtklzma-9.0d.lib\
vtkmetaio-9.0d.lib\
vtknetcdf-9.0d.lib\
vtkogg-9.0d.lib\
vtkParallelCore-9.0d.lib\
vtkParallelDIY-9.0d.lib\
vtkpng-9.0d.lib\
vtkpugixml-9.0d.lib\
vtkRenderingAnnotation-9.0d.lib\
vtkRenderingContext2D-9.0d.lib\
vtkRenderingContextOpenGL2-9.0d.lib\
vtkRenderingCore-9.0d.lib\
vtkRenderingFreeType-9.0d.lib\
vtkRenderingGL2PSOpenGL2-9.0d.lib\
vtkRenderingImage-9.0d.lib\
vtkRenderingLabel-9.0d.lib\
vtkRenderingLOD-9.0d.lib\
vtkRenderingOpenGL2-9.0d.lib\
vtkRenderingQt-9.0d.lib\
vtkRenderingSceneGraph-9.0d.lib\
vtkRenderingUI-9.0d.lib\
vtkRenderingVolume-9.0d.lib\
vtkRenderingVolumeOpenGL2-9.0d.lib\
vtkRenderingVtkJS-9.0d.lib\
vtksqlite-9.0d.lib\
vtksys-9.0d.lib\
vtkTestingRendering-9.0d.lib\
vtktheora-9.0d.lib\
vtktiff-9.0d.lib\
vtkverdict-9.0d.lib\
vtkViewsContext2D-9.0d.lib\
vtkViewsCore-9.0d.lib\
vtkViewsInfovis-9.0d.lib\
vtkViewsQt-9.0d.lib\
vtkWrappingTools-9.0d.lib\
vtkzlib-9.0d.lib

提升法使用VTK

  在UI设计师界面,拖入"OpenGL Widget"控件;在控件上右键,选择“提升为”;
在这里插入图片描述
  在使用该UI的类中增加代码,写一个渲染圆球的VTK例子;

#include <QSurfaceFormat>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkNamedColors.h>
#include <vtkProperty.h>
#include <vtkSmartPointer.h>

#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);

MyVtk::MyVtk(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MyVtk){
    ui->setupUi(this);
    
    QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());
    vtkNew<vtkNamedColors> colors;
    vtkNew<vtkSphereSource> sphereSource;
    vtkNew<vtkPolyDataMapper> sphereMapper;
    sphereMapper->SetInputConnection(sphereSource->GetOutputPort());
    vtkNew<vtkActor> sphereActor;
    sphereActor->SetMapper(sphereMapper);
    sphereActor->GetProperty()->SetColor(colors->GetColor4d("Tomato").GetData());
    vtkNew<vtkRenderer> renderer;
    renderer->AddActor(sphereActor);
    renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData());
    vtkNew<vtkGenericOpenGLRenderWindow> renderWindow;
    renderWindow->AddRenderer(renderer);
    renderWindow->SetWindowName("RenderWindowNoUIFile");
    setCentralWidget(ui->vtkRenderWidget);
    ui->vtkRenderWidget->setRenderWindow(renderWindow);
}

在这里插入图片描述

  注意:生成成功后,将vtk的输出目录下的bin目录下所有dll拷贝到Qt的debug目录下;
在这里插入图片描述
  可以解决下面这个问题,是由于没有找到使用的VTK的dll文件;
在这里插入图片描述

参考资料

1.QVTKWidget、QVTKOpenGLWidget等该使用哪一个?
2.Study-VTK:QVTKWidget、QVTKOpenGLWidget、QVTKOpenGLNativeWidget、QVTKWidget2 区别
3.QVTKOpenGLNativeWidget在Qt中的用法

  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑山老妖的笔记本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值