背景
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了。