当前位置: 首页 > news >正文

VTK|8.2.0升级到9.4.2遇到的问题及解决方法

上篇:VTK-8.2.0源码编译(Cmake+VS2022+Qt5.12.12)

文章目录

  • 下载
  • error C1083: 无法打开包括文件: “vtkSmartPointer.h”
  • error C1083: 无法打开包括文件: “QVTKOpenGLWidget.h”: No such file or directory
  • error C2039:"SetRenderWindow": 不是 "QVTKOpenGLNativeWidget" 的成员
  • error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”
  • error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: static class vtkOBJReader *
  • VTK由8.2.0升级到9.4.2之后什么都不显示了,变成黑屏了
  • 为什么之前vtk8.2.0没有这个问题而vtk9.4.2有这个问题?
  • 根本原因:Qt3DExtras::Qt3DWindow

下载

VTK下载链接:https://vtk.org/download/
没有zip包下载tar.gz使用7z解压两次后再打包成zip包
在这里插入图片描述

error C1083: 无法打开包括文件: “vtkSmartPointer.h”

是由于 VTK 9.x 开始移除了顶级头文件(例如 vtkSmartPointer.h)的默认包含路径。换句话说,VTK 9 不再默认把所有头文件放在一个扁平的 include 目录下,而是更强制模块化了。


✅ 解决方案

修改顶层cmake包含路径方式


将之前的导入形式

find_package(vtk 9.2.4 REQUIRED PATHS ${CMAKE_BINARY_DIR}/thirdparty/vtk-9.4.2/lib/cmake)

改为9.2.4版本的导入方式

set(VTK_DIR "${CMAKE_BINARY_DIR}/thirdparty/vtk-9.4.2/lib/cmake/vtk-9.4")  # 注意路径是否正确
find_package(VTK REQUIRED COMPONENTSCommonCoreCommonDataModelFiltersSourcesInteractionStyleRenderingCoreRenderingFreeTypeRenderingOpenGL2
)
target_include_directories(projectname PRIVATE${VTK_USE_FILE}
)

error C1083: 无法打开包括文件: “QVTKOpenGLWidget.h”: No such file or directory

你从 VTK 8.2.0 升级到 9.2.4 后遇到 QVTKOpenGLWidget.h 无法找到的问题,是因为 VTK 9.x 的 Qt 模块发生了重大变化。以下是问题原因和解决方法:


❗问题分析

在 VTK 8.2 中,QVTKOpenGLWidget 是由模块 RenderingQt 提供的头文件:

#include <QVTKOpenGLWidget.h>

但在 VTK 9.0 之后,VTK 的 Qt 模块被彻底重构和拆分为 CMake 的模块系统,头文件的位置也发生变化,QVTKOpenGLWidget.h 被放到了:

<VTK_INSTALL_PREFIX>/include/vtk-9.2/QVTKOpenGLNativeWidget.h

而且原来的 QVTKOpenGLWidget 已被重命名为:

QVTKOpenGLNativeWidget

✅ 解决方案

步骤 1:修改头文件引用

将你的 .h.cpp 文件中:

#include <QVTKOpenGLWidget.h>

改为:

#include <QVTKOpenGLNativeWidget.h>

并将类名 QVTKOpenGLWidget 改为:

QVTKOpenGLNativeWidget

✅ 注意:它继承自 QWidget,接口基本相同,可以直接替换。


步骤 2:在 CMakeLists.txt 中启用 Qt 支持的模块

你必须添加 VTK 的 Qt 模块(至少):

find_package(VTK REQUIRED COMPONENTS...GUISupportQtRenderingQt
)

确保你链接了 Qt5 和 VTK 的 Qt 模块:

target_link_libraries(CDS...${VTK_LIBRARIES}Qt5::Widgets
)

步骤 3:设置 VTK_MODULE_ENABLE_VTK_GUISupportQtYES

如果你是自己构建的 VTK,则需要重新配置 VTK 构建选项,确保以下选项打开:

选项
VTK_GROUP_ENABLE_QtYES
Module_vtkGUISupportQtYES
Module_vtkRenderingQtYES

否则上述头文件不会被安装。


增加启用 Qt 支持的模块后cmake编译失败,原因是vtk升级后解压编译的构建选项有所变化


set(VTK_CONFIGURE cmake -B ${VTK_ROOT}/src/${VTK_NAME}-build-G "${CMAKE_GENERATOR}" -A x64-S ${VTK_ROOT}/src/${VTK_NAME}-DCMAKE_INSTALL_PREFIX=${VTK_ROOT}-DVTK_Group_Qt=ON-DVTK_Group_StandAlone=ON-DVTK_Group_Rendering=ON-DVTK_BUILD_ALL_MODULES=OFF-DModule_vtkRenderingFreeType=ON-DModule_vtkRenderingAnnotation=ON
)

变为


set(VTK_CONFIGURE cmake -B ${VTK_ROOT}/src/${VTK_NAME}-build-G "${CMAKE_GENERATOR}" -A x64-S ${VTK_ROOT}/src/${VTK_NAME}-DCMAKE_INSTALL_PREFIX=${VTK_ROOT}# 启用核心模块-DVTK_GROUP_ENABLE_Qt=YES-DVTK_GROUP_ENABLE_StandAlone=YES-DVTK_GROUP_ENABLE_Rendering=YES# 显式开启你需要的模块-DModule_vtkRenderingOpenGL2=ON-DModule_vtkRenderingFreeType=ON-DModule_vtkRenderingAnnotation=ON-DModule_vtkInteractionStyle=ON-DModule_vtkGUISupportQt=ON-DModule_vtkRenderingQt=ON# 关闭构建全部模块以加快编译-DVTK_BUILD_ALL_MODULES=OFF
)

error C2039:“SetRenderWindow”: 不是 “QVTKOpenGLNativeWidget” 的成员

error C2039 : “GetInteractor”: 不是 “QVTKOpenGLNativeWidget” 的成员
这个报错说明你在使用 QVTKOpenGLNativeWidget 时调用了 SetRenderWindow,但是 VTK 9.x 中 QVTKOpenGLNativeWidget 不再有这个成员函数
所以代码应改为:

vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow =

相关文章:

  • 基于nacos2.5.1的MCP服务端微服务项目开发环境配置简介
  • Gemini 开发者 API 怎么用?接入指南(附示例)
  • go语言学习 第7章:数组
  • 【Bluedroid】蓝牙启动之 SMP_Init 源码解析
  • FPGA没有使用的IO悬空对漏电流有没有影响
  • art-pi2 上手记录(二)
  • 第五讲——一元函数微分学的几何应用
  • 端游如何反调试
  • Curtain MonGuard:智能水印颜色适配,提升屏幕信息安全
  • n皇后问题的 C++ 回溯算法教学攻略
  • C++算法动态规划3
  • 初识结构体,整型提升及操作符的属性
  • 仿射变换、根据特征点进行仿射变换
  • MultipartFile
  • 【Linux】ls 命令详解及使用示例:列出目录中的内容
  • 向量压缩方法全解析:从线性插值到小波压缩
  • spring重试机制
  • [IMX][UBoot] 01.UBoot 常用命令
  • MPO接口型光模块的失效检测
  • 进一步探究synchronized
  • wordpress mysql主机/苏州seo快速优化
  • 网站统计代码/台州seo
  • 邢台做移动网站哪儿好/广州各区风险区域最新动态
  • wordpress后台账号密码忘记/成都百度网站排名优化
  • 北京市公共资源交易服务平台/seo引擎搜索网站
  • 建站快车金牌代理商/长沙哪家网络公司做网站好