- 医疗健康
- 图像处理
- 数据可视化
- 桌面应用
- 3D渲染
【免费下载链接】Slicer
Multi-platform, free open source software for visualization and image computing.
本文基于 3D Slicer 仓库官方文档Docs/developer_guide/debugging/qtcreatorcpp.md展开,完整讲解如何用 Qt Creator 这一跨平台 IDE 打开 Slicer 的 CMake 工程、注入 Slicer 运行环境、选择正确的构建目录并配置调试运行,使 C++ 开发者能够在 Slicer 主程序、模块与库代码中直接打断点单步调试。读完后你可以独立完成:在 Debug 构建基础上启动带 Slicer 环境的 Qt Creator、以 CMake 工程方式接管 SuperBuild/内层构建目录、配置并行构建与SlicerApp-real运行配置,从而在 IDE 内完成“配置—构建—调试”的完整闭环。
官方提示:在 Windows 平台进行 C++ 调试,官方文档建议使用 Visual Studio,因为它的性能与功能优于 Visual Studio Code;Qt Creator 方案主要服务于跨平台场景与 Qt 深度集成的开发习惯。
前提条件
官方文档给出的两项前提,缺一不可:
- 先脱离 Qt Creator,在 Debug 模式下完成 3D Slicer 的构建。官方文档指引参考构建说明文档 构建概述。Debug 模式保证目标文件中带有调试符号(
-g//Zi一类),这是断点、变量查看与调用栈解析的前提;Release 构建下即使 Qt Creator 也能 attach,但符号信息缺失会让调试体验大打折扣。 - 通过 Qt Creator 安装 Qt SDK。Slicer 基于 Qt 构建 GUI 层,Qt Creator 需要匹配版本的 Qt Kit 才能正确解析 CMake 工程中的
find_package(Qt)依赖、生成可运行的 Run Configuration 与可调试的启动项。
Slicer 采用superbuild架构:构建过程中大部分依赖会被下载到本地目录中,先完成配置、编译与本地安装,之后才构建 Slicer 本身。理解这一点是后面“选择哪个构建目录打开工程”的关键背景。
第一步:用 Slicer 启动 Qt Creator,注入运行环境
官方文档要求不要直接双击启动 Qt Creator,而是从终端通过 Slicer 来启动它:
# Linux cd /path/to/Slicer-Superbuild/Slicer-build ./Slicer --launch /path/to/qtcreator:: Windows cd c:\path\to\Slicer-Superbuild\Slicer-build .\Slicer.exe --launch /path/to/qtcreator.exe这一步的目的(文档原话)是“setup environment”,即让 Qt Creator 继承 Slicer 的运行时环境,从而使 Qt Creator 的 UI 设计器能够识别并加载CTK 与 Slicer 的自定义 Designer 插件。
--launch背后的源码机制
从源码结构看,Slicer(Linux)/Slicer.exe(Windows)本身是一个基于 CTK AppLauncher 机制生成的启动器:
- 顶层 CMakeLists.txt 中显式定义了启动命令:
set(Slicer_LAUNCH_COMMAND ${Slicer_LAUNCHER_EXECUTABLE} --launch),说明“Slicer --launch <程序> <参数>”是 Slicer 构建体系的一等公民能力; - SlicerMacroBuildApplication.cmake 中
set(executable_name ${executable_name}App-real)表明:真正的应用二进制会被命名为...App-real(如SlicerApp-real),而外层的Slicer/Slicer.exe是负责环境组装的启动器壳; - 同样在 SlicerMacroBuildApplication.cmake 中,launcher 设置里包含
PATH "<APPLAUNCHER_SETTINGS_DIR>/../bin/designer-real${CMAKE_EXECUTABLE_SUFFIX}",可见启动器通过 PATH 等环境变量把 Slicer 的 Qt Designer 相关资源目录暴露给被 launch 的程序——这正是 Qt Creator 设计器能加载 Slicer 自定义控件的原因。
Slicer 仓库自带的 Qt Designer 自定义插件位于 Base/QTGUI/DesignerPlugins(如qSlicerWidgetPlugin、qSlicerModulePanelPlugin、qSlicerMouseModeToolBarPlugin等)与 Base/QTCLI/DesignerPlugins。当 Qt Creator 在 Slicer 注入的环境(PATH、QT_PLUGIN_PATH 等)中运行时,其 UI 编辑器即可把这些插件识别为可用的自定义控件;脱离该环境直接启动 Qt Creator 则无法做到。
此外,--launch机制还有一类直接证据:命令行选项注释 qSlicerCoreCommandOptions.h 中给出的测试用法./Slicer --testing --launch ./bin/qSlicerXXXTests ...,以及辅助脚本 setupSlicerEnvironment.sh.in 中Slicer --launcher-show-set-environment-commands的用法——后者正是“把 launcher 设置的环境变量打印出来供 shell 复用”的能力,与文档中“通过 Slicer 启动 QtCreator to setup environment”的思路同源。qSlicerCoreApplication.cxx 中的restart()实现也印证了这一点:应用重启时优先通过launcherExecutableFilePath()重新启动,以再次获得 launcher 组装好的环境。
第二步:在 Qt Creator 中打开工程并选择构建目录
在 Qt Creator 中打开/path/to/Slicer-src/CMakeLists.txt(源码树的顶层 CMakeLists.txt),当 Qt Creator 询问构建目录时,选择 Slicer 已经配置并编译过的那个构建目录。
官方文档在此处给了一个重要的 note,两种选择各有取舍:
- 选 SuperBuild 二进制树
/path/to/Slicer-Superbuild:允许在 Qt Creator 内部构建 Slicer 依赖的所有包,并构建 Slicer 本体,即“一切构建全部在 Qt Creator 内完成”; - 选内层构建目录
/path/to/Slicer-Superbuild/Slicer-build(SuperBuild 二进制树内部的那个 Slicer-build):在主要修改 Slicer 本身代码时提供更优的 IDE 体验——类型识别、文档悬浮提示、代码交叉引用等语义功能都基于已配置好的内层工程,索引结果更贴近 Slicer 自身的编译配置。
从 SuperBuild 架构看,外层树负责驱动各依赖(ITK、VTK、DCMTK 等)的 ExternalProject 构建,内层Slicer-build才是真正消费Slicer-src源码树、生成可执行工程文件的 CMake 缓存目录。因此若你的工作重点是 Slicer 本体的代码阅读与调试,选内层目录;若还要顺带重编依赖,选外层 SuperBuild 目录。
第三步:运行 CMake 配置并确认
- 点击
Run CMake按钮(无需任何参数),等待 CMake 配置完成,再点击Finish。 - 此步骤让 Qt Creator 基于你选择的构建目录生成工程模型、建立索引,后续的代码补全、跳转与构建/运行配置都依赖这次配置的结果。
可选步骤 A:配置 Make 构建参数(如并行度)
如果你希望在 Qt Creator 内完成构建,可以为 Make 构建步骤追加参数(文档示例为-j8并行 8 路):
- 点击左侧
Projects选项卡; - 点击顶部
Build Settings选项卡; - 点击 Make 构建步骤旁的
Details按钮; - 在附加参数处添加
-j8(或按机器核心数调整)。
构建 Slicer 耗时较长,合理设置并行度对提升在 IDE 内的构建效率很关键。若某次调试不需要完整重建,也可结合构建说明文档中的 CMake 选项(如关闭不需要的Slicer_BUILD_*支持项)在初始配置阶段就缩短构建时间,参见 构建概述。
可选步骤 B:配置 Run Configuration 以在 Qt Creator 内运行 Slicer
如果你希望在 Qt Creator 内直接运行(并调试)Slicer:
- 点击左侧
Projects选项卡; - 点击顶部
Run Settings选项卡; - 选择你的 Run configuration——文档给出的示例是选择
SlicerApp-real。
这里与源码完全对应:SlicerMacroBuildApplication.cmake 将真实应用可执行目标命名为SlicerApp-real(Windows 上为SlicerApp-real.exe),它才是承载完整 Slicer 逻辑的本体可执行文件;外层Slicer/Slicer.exe是 launcher 壳。对SlicerApp-real设置运行/调试配置,意味着调试器直接附着于应用本体而非启动器,断点行为更符合直觉(应用本体还是 console 型可执行文件,这一点在同文件 L437 的注释SlicerApp-real is a console application中也能看到)。
延伸阅读与配套文档
- 通用 C++ 调试建议与技巧:调试技巧、C++ 调试总览;
- 各平台专项调试文档:Linux C++ 调试、macOS C++ 调试、Windows C++ 调试、Visual Studio Code 调试,这些文档末尾均交叉链接到本文对应的 Qt Creator 章节;
- Slicer 命令行中
--launch、--testing等选项的语义定义:qSlicerCoreCommandOptions.h; - launcher 与
App-real可执行文件的生成逻辑:SlicerMacroBuildApplication.cmake。
适用前提小结:本流程假定你已按当前仓库文档完成 Slicer 的 SuperBuild 构建(Debug 模式),且 Qt Creator 版本原生支持 CMake 工程导入;选择 SuperBuild 外层目录或Slicer-build内层目录会直接影响 Qt Creator 能构建的范围与代码智能功能的贴合度,按“是否需要在 IDE 内重编依赖”来决定。
- 医疗健康
- 图像处理
- 数据可视化
- 桌面应用
- 3D渲染
【免费下载链接】Slicer
Multi-platform, free open source software for visualization and image computing.
相关推荐
使用 Qt Creator 构建、运行与调试 openage:C++ 与 QML 开发环境配置指南
使用 Qt Creator 构建、运行与调试 openage:C++ 与 QML 开发环境配置指南 openage 是一个以 C++ 为核心( libopena
游戏开发图形学使用 CodeLite 调试 3D Slicer C++ 代码:构建配置、WrapSlicer 包装脚本与 GDB 调试完整指南
使用 CodeLite 调试 3D Slicer C++ 代码:构建配置、WrapSlicer 包装脚本与 GDB 调试完整指南 本文面向需要在 3D Slic
医疗健康图像处理数据可视化桌面应用3D渲染ConvFormer S36 微调指南:在自定义数据集上迁移学习的完整步骤
ConvFormer S36 微调指南:在自定义数据集上迁移学习的完整步骤 ConvFormer S36 微调指南为您提供在自定义数据集上进行迁移学习的完整解决
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考