002-Qt&Vtk-第一个VtkQt程序
Posted DreamLife.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了002-Qt&Vtk-第一个VtkQt程序相关的知识,希望对你有一定的参考价值。
欢迎来到我的博客,希望这篇文章对你有所帮助,如果觉得不错,请点赞搜藏哈。
文章目录
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文件路径添加到环境变量。如下图所示
到这里,我们的程序在运行的时候,就不会报找不到动态库了,剩下的就是到Qt里面配置了。这里先只用环境变量和绝对路径,在后面我会尝试吧VTK集成到源码中,使用相对路径,方便工程移植。
3 新建Qt工程
熟悉Qt的,这部分基本可以忽略,可以直接跳过。
3.1 建立Qt Widgets Application工程
按照下图所示步骤,建立工程
按照以上部分,那么一个基本的工程就建立完成了,点击运行,看下能否正常启动。
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
这样完事以后执行以下qmake,看下有错没有。
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 源码
这里就要有人问了呀,这么优秀的代码,能不能分享下呀,当然可以呀,我不生产代码,我只是代码的搬运工,链接如下:
以上是关于002-Qt&Vtk-第一个VtkQt程序的主要内容,如果未能解决你的问题,请参考以下文章