在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,进行了如下配置:
-
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);
}