在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 COMPONENTS
CommonCore
CommonDataModel
FiltersCore
FiltersGeneral
GUISupportQt
RenderingQt
RenderingCore
RenderingOpenGL2
InteractionStyle)

头文件

#
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)
            ;
            }

运行效果展示

在这里插入图片描述

posted @ 2025-07-23 21:42  yjbjingcha  阅读(17)  评论(0)    收藏  举报