VTK8.0.0编译+QT5.9.2+VS2017

背景

VTK网上资料较多并且使用较多的版本可能是VTK8.2.0,但是由于之前先配置了QT 5.9.2+ msvc2017 + PCL1.8.1 + VTK8.0.0环境,听说有人PCL1.8.1配置VTK8.2.0实测版本不兼容,需修改源码调试,比较麻烦,所以之前就使用的VTK8.0.0版本。

之前配置PCL环境时,因为PCL安装后带的VTK不完整,编译VTK比较麻烦所以当时直接从网上下载的VTK库。现在测试时,发现VTK库在QT Designer中不能生成下面的QVTKWidget控件:

我这里Qt Designer中这样显示的:

因此决定重新编译一下VTK8.0.0测试一下。

编译过程

1、有网友说"VTK_RENDERING_BACKEND设置为OpenGL(这里一定要注意,否则pcl显示框会出错)。"默认是OpenGL2,这个我没有改,后面看会不会出错吧!

2、有网友说"不建议去掉TESTING,这会导致在后期VS编译阶段报错,需要修改头文件。"这个也等着看后面会不会有问题吧!

1、准备工作

首先下载了VTK8.0.0源码(不包含build,build是CMake时后新建的):

CMake下载:

版本cmake-3.28.0-rc2-windows-x86_64,免安装,下载 后找到目录bin文件夹下的cmake-gui.exe打开即可。

2、CMake重新编译VTK8.0.0

打开CMake,设置source code、build the binaries,我这里设置为D:/vtk-v8.0.0,之前新建并设置build目录,这里因为是测试所以新建并设置build_test目录。点击Add Entry添加:

Name:CMAKE_DEBUG_POSTFIX 、Type:STRING 、Value:-gd、Description:空

让vtk的lib最后分为debug版本跟release版本。Debug版本带-gd。Release版本不带-gd,方便区分。

设置好后如图:

点击左下角的configure按钮,按下面配置后Finish:

第一次configure完成之后:

需要额外勾选上BUILD_EXAMPLES,勾选上VTK_Group_Qt,这样以后方便在qt里面使用

CMAKE_INSTALL_PREFIX存放include,lib,dll(bin)等编译结果的目录。

上面设置好后第二次点击configure,第二次configure完成之后:

出现了这个窗口:

记得第一次CMake时没有出现这个的,算了不管了,接着下面的步骤。

VTK_QT_VERSION改成5。

上面设置好后第三次点击configure,第三次还有报红的:

确认后再次configure,直到最后没有报红项后:

点击Generate:

很快,点击Open Project后VS2017打开项目。

3、VS2017编译

开始64位release编译项目:

编译过程会报错:

该报错是因为CMake中勾选了BUILD_TESTING选项,而CMake的VTK_DATA_ROOT先设置不正确,导致编译时需要先下载vtkdata数据。由于网速或者没有科学上网等原因下载数据的时间 超过了设置的最大等待时间。

解决方法:

下载vtkdata.zip数据,将其解压文件中MD5文件覆盖二进制目录下\ExternalData\Objects\MD5文件。

一遍一遍重新编译,这个文件下载好了,又是相同原因的另一个没有下载下来报错,总是断断续续报错,但是由于VTK-8.0.0版本在网上又找不到对应的vtkdata.zip数据。CMake编译去掉于是去掉BUILD_TESTING选项的勾选重新编译,最后成功。

INSTALL

CMake出来的Visual Studio解决方案里,大多有个INSTALL项目。之前总是完全忽略这个项目,恰好,编译solution的时候,这个又默认被忽略,其实这个很有用。

INSTALL生成后,将会在CMAKE_INSTALL_PREFIX设置的目录下生成下面部分:

VS2017编译成功后将生成的release版本的QVTKWidgetPlugin.dll(有人说QVTKWidgetPlugin.lib、vtkGUISupportQt-8.0.dll、vtkGUISupportQtSQL-8.0.dll也放到目录下)放到以下QT目录下D:\Qt\Qt5.9.2\5.9.2\msvc2017_64\plugins\designer,再打开Qt Designer,这次就出现QVTKWidget了。

相关推荐
workflower2 小时前
单元测试-例子
java·开发语言·算法·django·个人开发·结对编程
YuanlongWang2 小时前
C# 基础——装箱和拆箱
java·开发语言·c#
b78gb2 小时前
电商秒杀系统设计 Java+MySQL实现高并发库存管理与订单处理
java·开发语言·mysql
LXS_3574 小时前
Day 05 C++ 入门 之 指针
开发语言·c++·笔记·学习方法·改行学it
etsuyou5 小时前
js前端this指向规则
开发语言·前端·javascript
shizhenshide5 小时前
为什么有时候 reCAPTCHA 通过率偏低,常见原因有哪些
开发语言·php·验证码·captcha·recaptcha·ezcaptcha
mit6.8246 小时前
[Agent可视化] 配置系统 | 实现AI模型切换 | 热重载机制 | fsnotify库(go)
开发语言·人工智能·golang
友友马6 小时前
『 QT 』QT控件属性全解析 (一)
开发语言·前端·qt
小白学大数据7 小时前
实战:Python爬虫如何模拟登录与维持会话状态
开发语言·爬虫·python
一念&7 小时前
每日一个C语言知识:C 结构体
c语言·开发语言