在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)
;
}
运行效果展示







浙公网安备 33010602011771号