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

简介: 本文将是Qt与Vtk结合的第一个程序,主要就是将Vtk与Qt结合,但是呢,也不完全算是Qt与Vtk结合的程序,这里并没有用到QVTKOpenglWidget,仅仅是用了Qt编译器,还可以说是纯C++的项目,只是没有用CMake来管理代码。

文章目录


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


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

image.png

2 配置


2.1 配置环境变量


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


知识讲解:


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


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


知识总结:


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


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


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

image.png

image.png

image.png

image.png

image.png

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

程序运行效果如下

image.png

4 源码



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

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



image.png

目录
相关文章
|
2月前
|
C++
VS2019编译VTK-9.1.0+Qt5.15.2
本文介绍了在VS2019和Qt 5.15.2环境下编译VTK 9.1.0的过程,包括成功编译无警告和错误的截图、修改的pro文件内容,以及在QML中加入VTK的失败尝试和参考链接。
|
2月前
|
C++
vtkdicom0.8_vtk9.2_dcmtk3.6.7_qt6.2编译OK
本文介绍了如何编译整合VTK 9.2、DICOM 0.8、DCMTK 3.6.7和Qt 6.2的步骤,包括安装Qt、CMake配置以及确认相关路径和版本设置。
vtkdicom0.8_vtk9.2_dcmtk3.6.7_qt6.2编译OK
|
2月前
|
人工智能
三战VS2019编译VTK7.1+Qt5.15.2
本文记录了作者在VS2019环境下编译VTK 7.1与Qt 5.15.2的历程,包括正确配置方法、遇到的编译错误以及解决过程。
|
2月前
|
人工智能 C++
初步编译QT5.15.2+VS2019+VTK8.2.0
本文介绍了在VS2019中编译QT 5.15.2和VTK 8.2.0的过程,包括编译结果、cmake库编译配置和cmake应用配置脚本,以及推荐的参考链接。
127 4
|
2月前
|
计算机视觉
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
这篇文章记录了使用VS2019编译Qt6.2.4、DCMTK3.6.7、VTK9.2.2、ITK5.3和OpenCV4.6.0的过程,包括下载和编译步骤,并提供了遇到编译错误时的解决方案和参考链接。
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
|
5月前
Qt6.5打包(QT windeployqt不是内部或外部命令、QT错误:缺少libgcc_s_seh-1.dll ,无法正常启动(0xc000007b) 问题解决方法)
Qt6.5打包(QT windeployqt不是内部或外部命令、QT错误:缺少libgcc_s_seh-1.dll ,无法正常启动(0xc000007b) 问题解决方法)
660 1
|
6月前
|
数据可视化
实现Hello Qt 程序
实现Hello Qt 程序
|
6月前
|
C++ 开发者
QT基础【3-VS和QtCreator转换】
QT基础【3-VS和QtCreator转换】
|
6月前
|
存储 JSON C++
Qt cmake 增加qml文件:深度剖析Qt cmake 的qt_add_qml_module函数
Qt cmake 增加qml文件:深度剖析Qt cmake 的qt_add_qml_module函数
254 0