Qt 集成VTK

news/2024/9/23 7:22:33/

Qt hello | 专注于Qt的技术分享平台

一,需求
集成VTK环境到Qt中


二,步骤

  1. 下载vtk源码,并使用cmake 结合vs2019编辑成dll库。
    GitHub - Kitware/VTK: Mirror of Visualization Toolkit repository
  2. Qt工程引入,库比较多,偷懒的情况下全部引入。
    pro文件配置如下:
    
    #VTK
    INCLUDEPATH += $PWD/3rd/VTK_8.2/include/vtk-8.2
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkChartsCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonColor-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonComputationalGeometry-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonDataModel-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonExecutionModel-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonMath-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonMisc-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonSystem-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkCommonTransforms-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkDICOMParser-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkDomainsChemistry-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkDomainsChemistryOpenGL2-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkexpat-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersAMR-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersExtraction-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersFlowPaths-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersGeneral-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersGeneric-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersGeometry-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersHybrid-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersHyperTree-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersImaging-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersModeling-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersParallel-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersParallelImaging-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersProgrammable-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersSelection-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersSMP-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersSources-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersStatistics-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersTexture-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkFiltersVerdict-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkfreetype-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkGeovisCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkglew-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkGUISupportQt-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkGUISupportQtSQL-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkhdf5-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkhdf5_hl-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingColor-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingFourier-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingGeneral-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingHybrid-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingMath-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingMorphological-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingSources-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingStatistics-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkImagingStencil-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkInfovisCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkInfovisLayout-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkInteractionImage-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkInteractionStyle-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkInteractionWidgets-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOAMR-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOEnSight-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOExodus-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOExport-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOGeometry-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOImage-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOImport-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOInfovis-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOLegacy-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOLSDyna-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOMINC-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOMovie-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIONetCDF-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOParallel-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOParallelXML-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOPLY-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOSQL-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOVideo-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOXML-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkIOXMLParser-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkjpeg-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkjsoncpp-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtklibxml2-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkmetaio-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkNetCDF-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkParallelCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkpng-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkproj-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingAnnotation-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingContext2D-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingContextOpenGL2-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingFreeType-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingImage-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingLabel-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingLOD-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingOpenGL2-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingQt-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingVolume-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkRenderingVolumeOpenGL2-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtksqlite-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtksys-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtktiff-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkverdict-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkViewsContext2D-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkViewsCore-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkViewsInfovis-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkViewsQt-8.2.lib
    LIBS +=$PWD/3rd/VTK_8.2/lib/vtkzlib-8.2.lib

3. UI文件中,创建一个QWidget,并将其提升为QVTKWidget.

4. 我们以显示一个stl文件为例。

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkSmartPointer.h>QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;vtkSmartPointer<vtkRenderer> Renderer;vtkSmartPointer<vtkRenderWindow> RenderWindow;
};
#endif // WIDGET_H

#include <vtkSTLReader.h>
#include <vtkPolyDataMapper.h>
#include <vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);RenderWindow=vtkSmartPointer<vtkRenderWindow>::New();Renderer = vtkSmartPointer<vtkRenderer>::New();Renderer->SetBackground(0.2, 0.2, 0.2);RenderWindow->AddRenderer(Renderer);ui->widget->SetRenderWindow(RenderWindow);std::string file =  "C:\\Users\\keiler\\Desktop\\file\\you-hou-che-men.stl";vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();reader->SetFileName(file.c_str());reader->Update();vtkSmartPointer<vtkPolyDataMapper> mapper =    vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(reader->GetOutputPort());vtkNew<vtkActor> partActor;partActor->SetMapper(mapper);Renderer->AddActor(partActor);
}Widget::~Widget()
{delete ui;
}

5. 效果

集成VTK | Qt hello

6. 备注

集成VTK | Qt hello


http://www.ppmy.cn/news/1431640.html

相关文章

java锁常识

AQS框架 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是 Java 中用于构建锁和同步器的基础框架。它提供了一种实现同步器的方式&#xff0c;使得开发者可以基于 AQS 构建各种类型的同步工具&#xff0c;如独占锁、共享锁、信号量等。 AQS 主要基于 FIFO 队列&…

Java 基础:工厂方法模式

工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一个创建对象的通用接口&#xff0c;但将实际创建逻辑推迟到子类中实现。这种模式允许客户端使用抽象接口来创建特定类型的对象&#xff0c;而无需了解具体的实现细节。以…

【后端】python深度学习的详细指引

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、什么是深度学习二、python深度学习的详细指引1. 确定学习目标和项目2. 学习基础知识3. 选择合适的深度学习框架4. 学习深度学习理论5. 实践项目6. 深入学习…

05_Qt资源文件添加

Qt资源文件添加 Qt 资源系统是一个跨平台的资源机制&#xff0c;用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如果你的程序需要加载特定的资源&#xff08;图标、文本翻译等&#xff09;&#xff0c;那么&#xff0c;将其放置在资源文件中&#xff0c;就…

CSS基础:浮动(float)的3种方式,清除浮动3种方式的详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

智能合约:概念与特点(了解什么是智能合约以及它的特点,如自动执行、不可篡改和可信任)

1.自动执行 智能合约通过预定义的代码和规则&#xff0c;在满足特定条件时自动执行。无需第三方介入&#xff0c;合约中的操作将在预定条件满足时自动触发。 2.不可篡改 智能合约的代码一旦部署在区块链上&#xff0c;便不可更改。这意味着合约一旦被创建&#xff0c;其中的规则…

基于ssm冀中工程技师校园网站设计与实现论文

摘 要 使用旧方法对冀中工程技师学院网站的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在冀中工程技师学院网站的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次…

watchEffect的使用

watchEffect 是 Vue 3 Composition API 中的一个函数&#xff0c;它用于在响应式数据变化时自动执行一个副作用函数。与 watch 不同&#xff0c;watchEffect 会自动收集其执行过程中访问到的响应式依赖&#xff0c;并在这些依赖发生变化时重新运行副作用函数。这意味着你不需要…