当前位置: 首页 > news >正文

在Window上安装和配置VTK9.x,并在QT项目中调试VTK是否可用

前言:工具链

在QT+VTK的项目中,我们所说的工具链是指在通过CMake配置VTK的时候所选择的C++编译器环境是使用MSVC还是MinGW,由于MSVC+VTK无论是在兼容性还是性能上面,都较MinGW更具优势,因此我们通常选择的工具链是MSVC,本文主要介绍在window环境下安装和配置VTK9.x

1 Qt Creator的MSVC配置

首先配置Qr Creator的编译器为MSVC
在这里插入图片描述
按照如图配置构建套件Kit为MSVC,因此最好先安装Virtual Studio

2 CMake-GUI构建VTK源码并使用VS2022编译安装VTK

  • Step01: 先从官网下载Window版本的Vtk源码,我这里下载的是vtk9.4.2,属于是比较新的版本了!

  • Step02:使用CMake-GUI,选择vtk源码路径(包含CMakeList.txt的目录,因为CMake工具是一句CMakeList.txt文件来进行项目构建的),确定vtk构建后的保存路径,如下图所示
    在这里插入图片描述
    弹出对话框,供我们选择编译器,这个时候依据我们主机安装的VS版本选择MSVC的版本以及操作系统的位数(通常是64位)

  • Step03:等待数分钟之后,配置Name/Value键值对,其目的是配置构建过程中的参数以符合我们对VTK库的需求,这里我们为了支持QT,进行了如下配置:
    在这里插入图片描述

    开启QT支持

  • Step04:点击Generate生成适配于MSVC的解决方案,使用VS2022打开.sln(在D:/Packages/VTK-9.4.2/build_msvc下找.sln文件),进行如下操作
    在这里插入图片描述
    然后点击批生成,勾选ALL_BUILD和INSTALL(建议选择Release版本)
    在这里插入图片描述
    在这里插入图片描述
    不出意外的话,你的VTK就配置安装成功了,你就可以在QT上使用VTK了…

3 在Qt项目中验证VTK是否安装成功

CMakeList.txt配置

# 设置VTK相关的变量:VTK_DIR应该指向.cmake的目录路径
set(VTK_INCLUDEDIRS "D:\\ProgramFiles\\VTK-9.4.2\\install_mssvc\\include\\vtk-9.4")
set(VTK_DIR "D:\\ProgramFiles\\VTK-9.4.2\\install_mssvc\\lib\\cmake\\vtk-9.4")
option(USE_QT "Use Qt with VTK" ON)# 寻找外部库VTK
find_package(VTK REQUIRED COMPONENTSCommonCoreCommonDataModelFiltersCoreFiltersGeneralGUISupportQtRenderingQtRenderingCoreRenderingOpenGL2InteractionStyle)

头文件

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);// VTK核心组件
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkGenericOpenGLRenderWindow.h>// VTK Qt集成组件(使用QVTKOpenGLWindow)
#include <QVTKOpenGLWindow.h>
#include <QVBoxLayout>
#include <QWidget>
#include <QSurfaceFormat>
#include <QWidget>

cpp文件

CWnd_3D::CWnd_3D(QWidget *parent): QWidget(parent), ui(new Ui::CWnd_3D)
{ui->setupUi(this);// 创建中央部件和布局QVBoxLayout* layout = new QVBoxLayout(this);// 创建VTK渲染组件vtkSmartPointer<vtkSphereSource> sphere = vtkSmartPointer<vtkSphereSource>::New();vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();// 配置渲染管线sphere->Update();mapper->SetInputConnection(sphere->GetOutputPort());actor->SetMapper(mapper);renderer->AddActor(actor);renderer->SetBackground(0.7, 0.8, 0.8);// 创建渲染窗口vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow =vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();renderWindow->AddRenderer(renderer);// 创建QVTKOpenGLWindow并设置渲染窗口QVTKOpenGLWindow* vtkWindow = new QVTKOpenGLWindow();vtkWindow->setRenderWindow(renderWindow);// 将QWindow包装为QWidget以集成到布局中QWidget* vtkWidget = QWidget::createWindowContainer(vtkWindow, this);layout->addWidget(vtkWidget);
}

运行效果展示

在这里插入图片描述

http://www.xdnf.cn/news/908893.html

相关文章:

  • 2025远离Deno和Fresh
  • 5G 核心网中 NF 选择机制:基于优先级、权重与负载分担的策略解析
  • 靶场(十九)--靶场体会小白分享--Billyboss
  • Langgraph实战--在Agent中加入人工反馈
  • OLED(SSD306)移植全解-基于IIC
  • 零基础完成 Token 创建的全流程教学
  • 芋道源码 - 本地文件上传配置与实现
  • 【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
  • 配置sudo免密却不生效的问题
  • 【图论 强连通分量】P1653 [USACO04DEC] Cow Ski Area G|普及+
  • for(;;) 和while(1) 的无限循环用法对比,优缺点说明
  • PHP:Web 开发的强大基石与未来展望
  • 给网站添加live2d看板娘
  • 当主观认知遇上机器逻辑:减少大模型工程化中的“主观性”模糊
  • WHAT - script type=“module“
  • 通过Spring AI框架搭建mcp服务端说明
  • 【Block总结】DBlock,结合膨胀空间注意模块(Di-SpAM)和频域模块Gated-FFN|即插即用|CVPR2025
  • FineReport模板认证找不到模板
  • pyarmor加密python程序
  • 【DAY41】简单CNN
  • 深入浅出Java ParallelStream:高效并行利器还是隐藏的陷阱?
  • 【使用conda】安装pytorch
  • python:基于pyside6的桌宠源码分享
  • java面试场景提题:
  • 全球知名具身智能/AI机器人实验室介绍之AI FACTORY基于慕尼黑工业大学
  • 数字孪生:如同为现实世界打造的“克隆体”,解锁无限可能
  • RabbitMQ 队列模式
  • CRM管理软件的审批流程设计与优化:提升企业运营效率的关键策略
  • DLL动态库实现文件遍历功能(Windows编程)
  • 浅谈不同二分算法的查找情况