小工具知识网

当前位置: 首页 > 行业知识 > Qt添加VTK并绘制图形

行业知识

Qt添加VTK并绘制图形

2026-11-10 05:27:52 来源:互联网转载

文章目录

  • 准备环境
  • 使用VS创建Qt Widget项目
  • 配置VTK依赖
    • 调试
    • C/C++
    • 链接器
    • 添加vtk窗口
    • ���试代码

      参考链接:

      VS2017配置QT环境(详细版)_vs2017 qt-CSDN博客

      QT5+VTK9.1最新配置方法_qt vtk-CSDN博客

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

      准备环境

      环境: Qt 5.14.2 + VS 2017 + VTK9.0.0

      安装好Qt及VS QT插件,编译VTK。

      使用VS创建Qt Widget项目

      在VS2017中依次点击文件-》新建-》工程,打开新建项目页面。

      这里可以设置类名和文件名等,默认和项目名字一样。不需要修改的话直接点击Finish。

      点击F5进入调试即可看到VS中出现了空的初始界面,到这里VS2017中的QT开发环境配置就全部完成了。

      配置VTK依赖

      项目右键 -> 属性

      调试

      环境:添加...\VTK\VTK-9.0.0\vtk-install\bind;

      C/C++

      常规 -> 附加包含目录:

      添加 ...\VTK\VTK-9.0.0\vtk-install\include\vtk-9.0

      链接器

      常规 -> 附加库目录:

      添加:

      ...\VTK\VTK-9.0.0\vtk-install\libd;

      输入 -> 附加依赖项:

      添加全部vtk库:

      vtkChartsCore-9.0d.libvtkCommonColor-9.0d.libvtkCommonComputationalGeometry-9.0d.libvtkCommonCore-9.0d.libvtkCommonDataModel-9.0d.libvtkCommonExecutionModel-9.0d.libvtkCommonMath-9.0d.libvtkCommonMisc-9.0d.libvtkCommonSystem-9.0d.libvtkCommonTransforms-9.0d.libvtkDICOMParser-9.0d.libvtkDomainsChemistry-9.0d.libvtkdoubleconversion-9.0d.libvtkexodusII-9.0d.libvtkexpat-9.0d.libvtkFiltersAMR-9.0d.libvtkFiltersCore-9.0d.libvtkFiltersExtraction-9.0d.libvtkFiltersFlowPaths-9.0d.libvtkFiltersGeneral-9.0d.libvtkFiltersGeneric-9.0d.libvtkFiltersGeometry-9.0d.libvtkFiltersHybrid-9.0d.libvtkFiltersHyperTree-9.0d.libvtkFiltersImaging-9.0d.libvtkFiltersModeling-9.0d.libvtkFiltersParallel-9.0d.libvtkFiltersParallelImaging-9.0d.libvtkFiltersPoints-9.0d.libvtkFiltersProgrammable-9.0d.libvtkFiltersSelection-9.0d.libvtkFiltersSMP-9.0d.libvtkFiltersSources-9.0d.libvtkFiltersStatistics-9.0d.libvtkFiltersTexture-9.0d.libvtkFiltersTopology-9.0d.libvtkFiltersVerdict-9.0d.libvtkfreetype-9.0d.libvtkGeovisCore-9.0d.libvtkgl2ps-9.0d.libvtkglew-9.0d.libvtkGUISupportQt-9.0d.libvtkGUISupportQtSQL-9.0d.libvtkhdf5-9.0d.libvtkhdf5_hl-9.0d.libvtkImagingColor-9.0d.libvtkImagingCore-9.0d.libvtkImagingFourier-9.0d.libvtkImagingGeneral-9.0d.libvtkImagingHybrid-9.0d.libvtkImagingMath-9.0d.libvtkImagingMorphological-9.0d.libvtkImagingSources-9.0d.libvtkImagingStatistics-9.0d.libvtkImagingStencil-9.0d.libvtkInfovisCore-9.0d.libvtkInfovisLayout-9.0d.libvtkInteractionImage-9.0d.libvtkInteractionStyle-9.0d.libvtkInteractionWidgets-9.0d.libvtkIOAMR-9.0d.libvtkIOAsynchronous-9.0d.libvtkIOCityGML-9.0d.libvtkIOCore-9.0d.libvtkIOEnSight-9.0d.libvtkIOExodus-9.0d.libvtkIOExport-9.0d.libvtkIOExportGL2PS-9.0d.libvtkIOExportPDF-9.0d.libvtkIOGeometry-9.0d.libvtkIOHDF-9.0d.libvtkIOImage-9.0d.libvtkIOImport-9.0d.libvtkIOInfovis-9.0d.libvtkIOLegacy-9.0d.libvtkIOLSDyna-9.0d.libvtkIOMINC-9.0d.libvtkIOMotionFX-9.0d.libvtkIOMovie-9.0d.libvtkIONetCDF-9.0d.libvtkIOOggTheora-9.0d.libvtkIOParallel-9.0d.libvtkIOParallelXML-9.0d.libvtkIOPLY-9.0d.libvtkIOSegY-9.0d.libvtkIOSQL-9.0d.libvtkIOTecplotTable-9.0d.libvtkIOVeraOut-9.0d.libvtkIOVideo-9.0d.libvtkIOXML-9.0d.libvtkIOXMLParser-9.0d.libvtkjpeg-9.0d.libvtkjsoncpp-9.0d.libvtklibharu-9.0d.libvtklibproj-9.0d.libvtklibxml2-9.0d.libvtkloguru-9.0d.libvtklz4-9.0d.libvtklzma-9.0d.libvtkmetaio-9.0d.libvtknetcdf-9.0d.libvtkogg-9.0d.libvtkParallelCore-9.0d.libvtkParallelDIY-9.0d.libvtkpng-9.0d.libvtkpugixml-9.0d.libvtkRenderingAnnotation-9.0d.libvtkRenderingContext2D-9.0d.libvtkRenderingCore-9.0d.libvtkRenderingFreeType-9.0d.libvtkRenderingGL2PSOpenGL2-9.0d.libvtkRenderingImage-9.0d.libvtkRenderingLabel-9.0d.libvtkRenderingLOD-9.0d.libvtkRenderingOpenGL2-9.0d.libvtkRenderingQt-9.0d.libvtkRenderingSceneGraph-9.0d.libvtkRenderingUI-9.0d.libvtkRenderingVolume-9.0d.libvtkRenderingVolumeOpenGL2-9.0d.libvtkRenderingVtkJS-9.0d.libvtksqlite-9.0d.libvtksys-9.0d.libvtkTestingRendering-9.0d.libvtktheora-9.0d.libvtktiff-9.0d.libvtkverdict-9.0d.libvtkViewsContext2D-9.0d.libvtkViewsCore-9.0d.libvtkViewsInfovis-9.0d.libvtkViewsQt-9.0d.libvtkWrappingTools-9.0d.libvtkzlib-9.0d.lib

      添加vtk窗口

      QVTKOpenGLNativeWidget 实际上是VTK给写好的一个自定义控件,继承自QWidget类,所以只需要将QWdiget类提升为QVTKOpenGLNativeWidget类就行了

      1.用Designer打开项目的界面文件(.ui后缀文件)

      2.在左边的控件栏中,将Containers下的“Widget”这个控件拖入到用户界面中,然后右边的对象查看器中就能查到你拖入的QWidget控件对象。

      3.对该对象点右键,选择“提升为”,提升为可以理解是将QT自带的控件类提升为开发者编写的自定义控件类。而QVTKOpenGLNativeWidget就是VTK编写的自定义控件类。

      4.然后提升的类名称填上“QVTKOpenGLNativeWidget”,头文件填写“QVTKOpenGLNativeWidget.h”。基类选择QWidget。然后点击“添加”-》“提升”

      提升的类名称:指自定义控件的类名称,VTK提供的自定义类名称就是QVTKOpenGLNativeWidget。

      头文件:指自定义控件的头文件,VTK提供的自定义控件类的头文件就是QVTKOpenGLNativeWidget.h。注意大小写。如果不对应的话,会失效。

      基类名称:指自定义的控件类的基类是谁,QVTKOpenGLNativeWidget的基类就是QWidget。选错了也是不行的。

      添加:指保存这个设定,下次可以直接拿来使用,不用重新输入以上信息。

      提升:指将你拖入UI中的QWidget控件,变成你写好的自定义控件类,在这里就是将QWidget类变成QVTKOpenGLNativeWidget类。

      5.重命名该窗口控件的对象名,用来写代码的时候识别。网上所见通常命名为“qvtkWidget”

      6.最后在你的主窗口类下调用ui的成员变量可以成功呼出qvtkWidget这个vtk窗口控件。

      实际上以上就是自定义控件类的定义过程,区别是该自定义控件类不需要自己写一个类,而是VTK已经写好提供给我们,我们直接拿来提升就行了。

      测试代码

      #include "QtWidgetsApplication2.h"#include #include #include #include #include #include #include #include #include #include #include #include "vtkAutoInit.h"VTK_MODULE_INIT(vtkRenderingOpenGL2);VTK_MODULE_INIT(vtkInteractionStyle);VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);VTK_MODULE_INIT(vtkRenderingFreeType);QtWidgetsApplication2::QtWidgetsApplication2(QWidget *parent)    : QMainWindow(parent){    ui.setupUi(this);    QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());    vtkNew colors;    vtkNew sphereSource;    vtkNew sphereMapper;    sphereMapper->SetInputConnection(sphereSource->GetOutputPort());    vtkNew sphereActor;    sphereActor->SetMapper(sphereMapper);    sphereActor->GetProperty()->SetColor(colors->GetColor4d("Tomato").GetData());    vtkNew renderer;    renderer->AddActor(sphereActor);    renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData());    vtkNew renderWindow;    renderWindow->AddRenderer(renderer);    renderWindow->SetWindowName("RenderWindowNoUIFile");    setCentralWidget(ui.widget);    ui.widget->setRenderWindow(renderWindow);}QtWidgetsApplication2::~QtWidgetsApplication2(){}

      运行结果:

上一篇:揭秘JavaScript图片过滤秘籍,高效筛选轻松搞定!

下一篇:CKplayer视频下载秘籍,轻松掌握网页视频下载技巧,一键下载无忧!