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

目录
相关文章
|
7月前
|
Web App开发 存储 Linux
Linux(33)Rockchip RK3568 Ubuntu22.04上通过SSH运行Qt程序和关闭Chrome的密钥提示
Linux(33)Rockchip RK3568 Ubuntu22.04上通过SSH运行Qt程序和关闭Chrome的密钥提示
483 0
|
7月前
【QT】读写.ini配置文件的程序实现
【QT】读写.ini配置文件的程序实现
121 0
|
5月前
|
Linux iOS开发 开发者
Qt问题(二):无法定位程序输入点于动态链接库
动态链接库(Dynamic Link Library,简称DLL)是一种可执行文件格式,常见于Windows操作系统中,而在Linux和macOS等其他操作系统中,相似的概念通常被称为共享库(Shared Library)。动态链接库允许程序在运行时加载所需的代码和数据,而不是在编译时静态链接到应用程序中。这种方式带来了几个重要的优点:
518 3
|
3月前
|
C语言 Android开发 C++
基于MTuner软件进行qt的mingw编译程序的内存泄漏检测
本文介绍了使用MTuner软件进行Qt MinGW编译程序的内存泄漏检测的方法,提供了MTuner的下载链接和测试代码示例,并通过将Debug程序拖入MTuner来定位内存泄漏问题。
基于MTuner软件进行qt的mingw编译程序的内存泄漏检测
|
7月前
|
开发框架 自然语言处理 Linux
Qt:构建强大跨平台应用程序的框架
Qt:构建强大跨平台应用程序的框架
|
5月前
|
调度
【浅入浅出】Qt多线程机制解析:提升程序响应性与并发处理能力
在学习QT线程的时候我们首先要知道的是QT的主线程,也叫GUI线程,意如其名,也就是我们程序的最主要的一个线程,主要负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上书写逻辑时碰到了需要一直等待的事件该怎么办?它的加载必定会带着主界面的卡顿,这时候我们就要去使用多线程。
176 6
|
7月前
|
C++
QT第一个程序命名空间详解,解释ui_widget的和xxx.cpp的联系
QT第一个程序命名空间详解,解释ui_widget的和xxx.cpp的联系
123 0
|
7月前
|
编译器
QT creator开发环境下 界面更改后运行程序不能实时更新或者在源文件添加该控件后无法编译的问题
在使用QT Creator开发界面的过程中,偶尔会出现添加控件后,运行程序后,界面控件无法更新的情况,或者在源文件使用该控件却出现无法编译的情况,使用QT Creator 4.8.2也会出现这个情况,也不知道这种情况会不会在以后有所改善。
332 0
|
6月前
Qt MainWindow 程序主窗口
Qt MainWindow 程序主窗口