当前位置:   article > 正文

Qt学习笔记安装部分2:Qt5.12.8+VTK8.2.0+VS2017+Cmake3.19.3_qt5.12.8+vs2017

qt5.12.8+vs2017

参考:

VTK8.2.0在Windows10+VS2017+Qt 5.12环境下编译安装_annjeff的博客-CSDN博客

WIN 10 + Qt 5.12 + CMake 2.23 + VS2022 + VTK 8.2 教程 - 知乎

VTK笔记-Qt5.12.11编译VTK9.0.3-QVTKOpenGLNativeWidget_黑山老妖的博客的博客-CSDN博客

QT实现vtk的可视化 | 易学教程

一、Cmake部分

下载VTK之后解压,新建三个文件夹分别命名

管理员方式打开Cmake,填写要编译的源文件和放的位置点configure

 

选VS和x64

 

 configure后会有爆红

1,prefix选新建的放debug的文件夹,是安装的文件夹

2,example不选会没有后面的例子测试

3,group_qt要选上

4,qt5-dir要选上如图的位置,可能要configure好几遍,也可能一次搜不出来,configure之后再搜

5,CMAKE_DEBUG_POSTFIX后面添加-d这样进行Debug版本编译时会在库文件名后面多个-d(这一步我没有)

6,还有一个VTK_QT_VERSION 5 要选5,可能搜不到,那就不管

 

 

出现 configure done 之后没有红色,就点击generate。

二 、VS部分

找到vtk.sln文件双击点开

 点击最上面选项栏的生成,点击批生成

 先release,但是会被放到debug的文件夹里

 

 生成的文件在刚刚设定的文件里,剪切到Release里,重复上面的all-build和install,改成debug。

 将Release 版本下 VTK-8.2.0-Install-VS2017-x64-Release\plugins\designer\QVTKWidgetPlugin.dll复制到 Qt Creator的5.12.0\msvc2017_64\plugins\designer\文件夹下

打开Qt designer,会看到新的vtk插件

三、测试

选一个example,这里选的cube

 ctrl+f5

 左键右键快乐滑滑

四、Qt中使用VTK

1,新建Qt项目(全都默认也可以)

2,点击pro文件,更改pro。添加vtk源和vtk库 可以用之前release的源和库也可以是debug的源和库。加哪一种运行的时候就用哪种模式。

获取lib文件下的目录:Windows+R调用出cmd命令行,输入dir E:\2022-software\VTK\VTK-8.2.0-Install-VS2017-x64-Release\lib  /b >E:\2022-software\VTK\VTK-8.2.0-Install-VS2017-x64-Release\lib\libsname.txt

参考这个

 dos读取文件夹的所有文件名_dadadaXJ的博客-CSDN博客_dos命令获取文件夹下文件名

  1. #//202271721:30:08更改
  2. INCLUDEPATH += "E:/2022-software/VTK/VTK-8.2.0-Install-VS2017-x64-Release/include/vtk-8.2/"
  3. INCLUDEPATH += "E:/2022-software/VTK/VTK-8.2.0-Install-VS2017-x64-Release/include/vtk-8.2/vtkhdf5"
  4. LIBS += -L$$quote("E:/2022-software/VTK/VTK-8.2.0-Install-VS2017-x64-Release/lib/")
  5. LIBS += vtkChartsCore-8.2.lib\
  6. vtkCommonColor-8.2.lib\
  7. vtkCommonComputationalGeometry-8.2.lib\
  8. vtkCommonCore-8.2.lib\
  9. vtkCommonDataModel-8.2.lib\
  10. vtkCommonExecutionModel-8.2.lib\
  11. vtkCommonMath-8.2.lib\
  12. vtkCommonMisc-8.2.lib\
  13. vtkCommonSystem-8.2.lib\
  14. vtkCommonTransforms-8.2.lib\
  15. vtkDICOMParser-8.2.lib\
  16. vtkDomainsChemistry-8.2.lib\
  17. vtkDomainsChemistryOpenGL2-8.2.lib\
  18. vtkdoubleconversion-8.2.lib\
  19. vtkexodusII-8.2.lib\
  20. vtkexpat-8.2.lib\
  21. vtkFiltersAMR-8.2.lib\
  22. vtkFiltersCore-8.2.lib\
  23. vtkFiltersExtraction-8.2.lib\
  24. vtkFiltersFlowPaths-8.2.lib\
  25. vtkFiltersGeneral-8.2.lib\
  26. vtkFiltersGeneric-8.2.lib\
  27. vtkFiltersGeometry-8.2.lib\
  28. vtkFiltersHybrid-8.2.lib\
  29. vtkFiltersHyperTree-8.2.lib\
  30. vtkFiltersImaging-8.2.lib\
  31. vtkFiltersModeling-8.2.lib\
  32. vtkFiltersParallel-8.2.lib\
  33. vtkFiltersParallelImaging-8.2.lib\
  34. vtkFiltersPoints-8.2.lib\
  35. vtkFiltersProgrammable-8.2.lib\
  36. vtkFiltersSelection-8.2.lib\
  37. vtkFiltersSMP-8.2.lib\
  38. vtkFiltersSources-8.2.lib\
  39. vtkFiltersStatistics-8.2.lib\
  40. vtkFiltersTexture-8.2.lib\
  41. vtkFiltersTopology-8.2.lib\
  42. vtkFiltersVerdict-8.2.lib\
  43. vtkfreetype-8.2.lib\
  44. vtkGeovisCore-8.2.lib\
  45. vtkgl2ps-8.2.lib\
  46. vtkglew-8.2.lib\
  47. vtkGUISupportQt-8.2.lib\
  48. vtkGUISupportQtSQL-8.2.lib\
  49. vtkhdf5-8.2.lib\
  50. vtkhdf5_hl-8.2.lib\
  51. vtkImagingColor-8.2.lib\
  52. vtkImagingCore-8.2.lib\
  53. vtkImagingFourier-8.2.lib\
  54. vtkImagingGeneral-8.2.lib\
  55. vtkImagingHybrid-8.2.lib\
  56. vtkImagingMath-8.2.lib\
  57. vtkImagingMorphological-8.2.lib\
  58. vtkImagingSources-8.2.lib\
  59. vtkImagingStatistics-8.2.lib\
  60. vtkImagingStencil-8.2.lib\
  61. vtkInfovisCore-8.2.lib\
  62. vtkInfovisLayout-8.2.lib\
  63. vtkInteractionImage-8.2.lib\
  64. vtkInteractionStyle-8.2.lib\
  65. vtkInteractionWidgets-8.2.lib\
  66. vtkIOAMR-8.2.lib\
  67. vtkIOAsynchronous-8.2.lib\
  68. vtkIOCityGML-8.2.lib\
  69. vtkIOCore-8.2.lib\
  70. vtkIOEnSight-8.2.lib\
  71. vtkIOExodus-8.2.lib\
  72. vtkIOExport-8.2.lib\
  73. vtkIOExportOpenGL2-8.2.lib\
  74. vtkIOExportPDF-8.2.lib\
  75. vtkIOGeometry-8.2.lib\
  76. vtkIOImage-8.2.lib\
  77. vtkIOImport-8.2.lib\
  78. vtkIOInfovis-8.2.lib\
  79. vtkIOLegacy-8.2.lib\
  80. vtkIOLSDyna-8.2.lib\
  81. vtkIOMINC-8.2.lib\
  82. vtkIOMovie-8.2.lib\
  83. vtkIONetCDF-8.2.lib\
  84. vtkIOParallel-8.2.lib\
  85. vtkIOParallelXML-8.2.lib\
  86. vtkIOPLY-8.2.lib\
  87. vtkIOSegY-8.2.lib\
  88. vtkIOSQL-8.2.lib\
  89. vtkIOTecplotTable-8.2.lib\
  90. vtkIOVeraOut-8.2.lib\
  91. vtkIOVideo-8.2.lib\
  92. vtkIOXML-8.2.lib\
  93. vtkIOXMLParser-8.2.lib\
  94. vtkjpeg-8.2.lib\
  95. vtkjsoncpp-8.2.lib\
  96. vtklibharu-8.2.lib\
  97. vtklibxml2-8.2.lib\
  98. vtkLocalExample-8.2.lib\
  99. vtklz4-8.2.lib\
  100. vtklzma-8.2.lib\
  101. vtkmetaio-8.2.lib\
  102. vtkNetCDF-8.2.lib\
  103. vtkogg-8.2.lib\
  104. vtkParallelCore-8.2.lib\
  105. vtkpng-8.2.lib\
  106. vtkproj-8.2.lib\
  107. vtkpugixml-8.2.lib\
  108. vtkRenderingAnnotation-8.2.lib\
  109. vtkRenderingContext2D-8.2.lib\
  110. vtkRenderingContextOpenGL2-8.2.lib\
  111. vtkRenderingCore-8.2.lib\
  112. vtkRenderingFreeType-8.2.lib\
  113. vtkRenderingGL2PSOpenGL2-8.2.lib\
  114. vtkRenderingImage-8.2.lib\
  115. vtkRenderingLabel-8.2.lib\
  116. vtkRenderingLOD-8.2.lib\
  117. vtkRenderingOpenGL2-8.2.lib\
  118. vtkRenderingQt-8.2.lib\
  119. vtkRenderingVolume-8.2.lib\
  120. vtkRenderingVolumeOpenGL2-8.2.lib\
  121. vtksqlite-8.2.lib\
  122. vtksys-8.2.lib\
  123. vtktheora-8.2.lib\
  124. vtktiff-8.2.lib\
  125. vtkverdict-8.2.lib\
  126. vtkViewsContext2D-8.2.lib\
  127. vtkViewsCore-8.2.lib\
  128. vtkViewsInfovis-8.2.lib\
  129. vtkViewsQt-8.2.lib\
  130. vtkzlib-8.2.lib\
  131. #//到这里为止
3,更改mainwindow.h
  1. #ifndef INITIAL_OPENGL
  2. #define INITIAL_OPENGL
  3. #include <vtkAutoInit.h>
  4. VTK_MODULE_INIT(vtkRenderingOpenGL2)
  5. VTK_MODULE_INIT(vtkInteractionStyle)
  6. VTK_MODULE_INIT(vtkRenderingFreeType)
  7. #endif

斜杠如果放到lib前面可能会有无法解析的情况

4,mainwindow.cpp

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <vtkPolyData.h>
  4. #include <vtkSTLReader.h>
  5. #include <vtkSmartPointer.h>
  6. #include <vtkPolyDataMapper.h>
  7. #include <vtkActor.h>
  8. #include <vtkRenderWindow.h>
  9. #include <vtkRenderer.h>
  10. #include <vtkRenderWindowInteractor.h>
  11. #include <vtkInteractorStyleTrackballCamera.h>
  12. #include <vtkGenericOpenGLRenderWindow.h>
  13. MainWindow::MainWindow(QWidget *parent)
  14. : QMainWindow(parent)
  15. , ui(new Ui::MainWindow)
  16. {
  17. ui->setupUi(this);
  18. std::string inputFilename = "E:/Qtwork/firstVTK/iphone1.STL";//读取的stl文件
  19. //读取文件
  20. vtkSmartPointer<vtkSTLReader> reader =
  21. vtkSmartPointer<vtkSTLReader>::New();
  22. reader->SetFileName(inputFilename.c_str());
  23. reader->Update();
  24. //source转换成mapper
  25. vtkSmartPointer<vtkPolyDataMapper> mapper =
  26. vtkSmartPointer<vtkPolyDataMapper>::New();
  27. mapper->SetInputConnection(reader->GetOutputPort());
  28. //送入渲染引擎进行显示
  29. vtkSmartPointer<vtkActor> actor =
  30. vtkSmartPointer<vtkActor>::New();
  31. actor->SetMapper(mapper);
  32. //渲染
  33. vtkSmartPointer<vtkRenderer> renderer =
  34. vtkSmartPointer<vtkRenderer>::New();
  35. renderer->AddActor(actor);
  36. renderer->SetBackground(.0,.0,.0);
  37. //设置渲染窗口
  38. vtkSmartPointer<vtkGenericOpenGLRenderWindow> window =
  39. vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
  40. window->AddRenderer(renderer);
  41. setCentralWidget(ui->widget);
  42. ui->widget->SetRenderWindow(window);
  43. }
  44. MainWindow::~MainWindow()
  45. {
  46. delete ui;
  47. }

stl 文件的下载地址

GitHub - kingarthas37/3d-printer-files: 3d打印的stl、max文件存储

5,进入UI界面

选择widget或者OpenGl widget拖到框里,这里选的是widget

 右键选择提升为,填写QVTKOpenGLWidget和QVTKOpenGLWidget.h点击添加,就会加到上面的框框里,选择之后点提升,就可以使用了。

 6,选择运行模式运行

7,出现程序运行错误 The process was ended forcefully

点击生成的程序,把E:\2022-software\VTK\VTK-8.2.0-Install-VS2017-x64-Release\bin里面的lib文件都复制到E:\Qtwork\build-firstVTK-Desktop_Qt_5_12_8_MSVC2017_64bit-Release\release中,这个build-firstVTK-Desktop_Qt_5_12_8_MSVC2017_64bit-Release是在运行后生成的文件。

 如果是debug模式就复制debug下的lib进去

8, QWidget: Must construct a QApplication before a QWidget

还出现了这个错误,但是啥也没改,就是把lib重新复制了一遍就好了

9,mainwindow.cpp:50:14: error: no member named 'widget' in 'Ui::MainWindow'

解决:重构就可以

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/138499
推荐阅读
相关标签
  

闽ICP备14008679号