文章目录
Qt&Vtk第一个VtkQt程序
1 程序运行效果
2 配置
2.1 配置环境变量
3 新建Qt工程
3.1 建立Qt Widgets Application工程
3.2 完成 Pro文件基本配置
3.3 写测试代码
3.4 运行测试
4 源码
Qt&Vtk第一个VtkQt程序
本文将是Qt与Vtk结合的第一个程序,主要就是将Vtk与Qt结合,但是呢,也不完全算是Qt与Vtk结合的程序,这里并没有用到QVTKOpenglWidget,仅仅是用了Qt编译器,还可以说是纯C++的项目,只是没有用CMake来管理代码。不过一步一步来吧。
1 程序运行效果
先看下程序运行起来的效果吧,如下图所示。
2 配置
2.1 配置环境变量
关于配置环境变量问题,好多人都提到配置完成环境变量需要重新启动电脑,这里其实还是要有区分的,不是所有内容都需要重新启动电脑的,可以看下这里http://www.winwin7.com/jc/18842.html,防止链接失效,这里引用下
知识讲解:
1、修改环境变量之后,如果受影响的是应用程序,那么只要简单地重新启动此应用程序,环境变量的修改就会反映到该程序中,而不必重新启动电脑;
2、如果受影响的是系统服务,就必须重新启动才能将环境变量的修改反映到系统服务中(因为没有办法在不重启计算机的情况下重新启动系统服务管理器)。
知识总结:
所以在设置环境变量的时,上面的是某个用户的环境变量,下面是系统的环境变量
如果设置的是某个用户的环境变量,就得重启,而系统的环境变量就不用重启你的电脑!
还是说会配置,这里我们需要把上篇中编译好的Bin文件夹中的bin文件路径添加到环境变量。如下图所示
3.2 完成 Pro文件基本配置
这里其实也没有什么,就是配置一下包含头文件路径和链接一下lib库。由于这个库文件比较多,所以在连接的时候最好使用点方法,不然自己一个一个链接就要崩溃了150多个lib呢。使用CMD指令也好,还是还是Qt的多行编辑也可以,我看还有人使用excel的,大家自己搞吧,总之就是把头文件包含了,包lib添加了,就可以了。
这里提供一下lib库代码,
LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkChartsCore-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkCommonColor-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkCommonComputationalGeometry-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkCommonCore-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkCommonDataModel-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkCommonExecutionModel-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkCommonMath-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkCommonMisc-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkCommonSystem-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkCommonTransforms-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkDICOMParser-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkDomainsChemistry-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkDomainsChemistryOpenGL2-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkdoubleconversion-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkexodusII-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkexpat-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersAMR-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersCore-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersExtraction-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersFlowPaths-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersGeneral-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersGeneric-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersGeometry-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersHybrid-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersHyperTree-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersImaging-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersModeling-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersParallel-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersParallelImaging-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersPoints-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersProgrammable-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersSelection-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersSMP-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersSources-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersStatistics-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersTexture-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersTopology-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkFiltersVerdict-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkfreetype-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkGeovisCore-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkgl2ps-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkglew-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkGUISupportQt-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkGUISupportQtSQL-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkhdf5_hl-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkhdf5-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkImagingColor-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkImagingCore-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkImagingFourier-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkImagingGeneral-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkImagingHybrid-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkImagingMath-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkImagingMorphological-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkImagingSources-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkImagingStatistics-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkImagingStencil-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkInfovisCore-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkInfovisLayout-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkInteractionImage-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkInteractionStyle-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkInteractionWidgets-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOAMR-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOAsynchronous-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOCityGML-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOCore-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOEnSight-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOExodus-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOExport-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOExportOpenGL2-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOExportPDF-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOGeometry-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOImage-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOImport-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOInfovis-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOLegacy-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOLSDyna-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOMINC-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOMovie-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIONetCDF-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOParallel-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOParallelXML-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOPLY-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOSegY-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOSQL-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOTecplotTable-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOVeraOut-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOVideo-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOXML-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkIOXMLParser-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkjpeg-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkjsoncpp-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtklibharu-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtklibxml2-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkLocalExample-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtklz4-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtklzma-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkmetaio-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkNetCDF-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkogg-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkParallelCore-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkpng-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkproj-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkpugixml-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingAnnotation-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingContext2D-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingContextOpenGL2-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingCore-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingFreeType-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingGL2PSOpenGL2-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingImage-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingLabel-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingLOD-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingOpenGL2-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingQt-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingVolume-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkRenderingVolumeOpenGL2-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtksqlite-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtksys-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtktheora-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtktiff-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkverdict-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkViewsContext2D-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkViewsCore-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkViewsInfovis-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkViewsQt-8.2 LIBS += -LC:/Dev/VTK/Bin/lib/ -lvtkzlib-8.2
其实是应该先包含头文件的,这里就一行代码
INCLUDEPATH += C:\Dev\VTK\Bin\include\vtk-8.2
3.3 写测试代码
下面就开始写代码了,先不要看具体啥作用,现在我也不知道啥作用,网上当下来,先搞起来。直接在main.cpp中添加代码。
#include <QApplication> #include <vtkSphereSource.h> #include <vtkPolyData.h> #include <vtkSmartPointer.h> #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkRenderWindow.h> #include <vtkRenderer.h> #include <vtkRenderWindowInteractor.h> #include "vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); int main(int argc, char *argv[]) { vtkSmartPointer<vtkSphereSource> sphereSource =vtkSmartPointer<vtkSphereSource>::New(); sphereSource->SetCenter(0.0, 0.0, 0.0); sphereSource->SetRadius(5.0); vtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(sphereSource->GetOutputPort()); vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); vtkSmartPointer<vtkRenderer> renderer =vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow =vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =vtkSmartPointer<vtkRenderWindowInteractor>::New(); renderWindowInteractor->SetRenderWindow(renderWindow); renderer->AddActor(actor); renderer->SetBackground(.3, .6, .3); // Background color green renderWindow->Render(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }
其实这么写下来,基本上都不算是用到了Qt的内容了,仅仅是在Qt开发环境下可以跑起来,不过目前来说也知足了。
3.4 运行测试
程序运行效果如下
4 源码
这里就要有人问了呀,这么优秀的代码,能不能分享下呀,当然可以呀,我不生产代码,我只是代码的搬运工,链接如下:
自取:https://github.com/DreamLife-Jianwei/Qt-Vtk