Qt&Vtk-002-第一个VtkQt程序

文章目录


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 程序运行效果


先看下程序运行起来的效果吧,如下图所示。

Qt&Vtk-002-第一个VtkQt程序

2 配置


2.1 配置环境变量


关于配置环境变量问题,好多人都提到配置完成环境变量需要重新启动电脑,这里其实还是要有区分的,不是所有内容都需要重新启动电脑的,可以看下这里http://www.winwin7.com/jc/18842.html,防止链接失效,这里引用下


知识讲解:


1、修改环境变量之后,如果受影响的是应用程序,那么只要简单地重新启动此应用程序,环境变量的修改就会反映到该程序中,而不必重新启动电脑;


2、如果受影响的是系统服务,就必须重新启动才能将环境变量的修改反映到系统服务中(因为没有办法在不重启计算机的情况下重新启动系统服务管理器)。


知识总结:


所以在设置环境变量的时,上面的是某个用户的环境变量,下面是系统的环境变量


如果设置的是某个用户的环境变量,就得重启,而系统的环境变量就不用重启你的电脑!


还是说会配置,这里我们需要把上篇中编译好的Bin文件夹中的bin文件路径添加到环境变量。如下图所示

Qt&Vtk-002-第一个VtkQt程序

Qt&Vtk-002-第一个VtkQt程序

Qt&Vtk-002-第一个VtkQt程序

Qt&Vtk-002-第一个VtkQt程序

Qt&Vtk-002-第一个VtkQt程序

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 运行测试

程序运行效果如下

Qt&Vtk-002-第一个VtkQt程序

4 源码



这里就要有人问了呀,这么优秀的代码,能不能分享下呀,当然可以呀,我不生产代码,我只是代码的搬运工,链接如下:

自取:https://github.com/DreamLife-Jianwei/Qt-Vtk



Qt&Vtk-002-第一个VtkQt程序

上一篇:Photoshop调出外景图片流行的欧美怀旧色


下一篇:运营也用的起来的数据分析工具:Quick BI即席分析详解