
RTAB-Map
—Stars面向机器人感知与自主导航的实时外观建图系统,融合视觉、RGB-D、双目与 LiDAR 数据,覆盖回环检测、图优化、定位和三维建图,并提供 C++ 核心、Qt 桌面工具及 ROS / ROS 2 集成。
没有任务,就不应该留下进度窗口
一个对话框何时创建,决定错误返回之后是否还会残留孤立的 UI 资源。
same 7 lines→RUN三个检测入口同时不可用
`DatabaseViewer::detectMoreLoopClosures()` 在验证检测选项之前就创建并显示 `ProgressDialog`。当 intra-session 与 inter-session 都关闭、同时又没有选择图节点时,函数弹出配置警告后直接返回,但已经可见的进度窗口没有任何任务可以推进或完成,因而成为无法正常收尾的孤立对话框。
先显示窗口,再发现任务不能开始
进度窗口不是输入表单,而是“有效任务已经开始”的运行期资源;它的生命周期必须由同一条工作路径负责取消、推进和关闭。若请求连前置条件都不满足,就不存在可报告的进度。与其在每个错误出口补清理逻辑,不如让校验闸门支配资源创建,从控制流上保证失败发生时对话框尚不存在。
校验支配资源创建与生命周期
将原有七行 `ProgressDialog` 构造与配置代码原样移动到无效选项检查之后:错误配置现在只显示警告并返回,创建的对话框数量为零;合法配置仍沿用相同父对象、`WA_DeleteOnClose`、取消按钮、宽度与显示行为,回环检测本身没有改变。
错误路径归零,正常路径完全不变
无效检测请求现在只显示配置警告,不会创建任何进度资源;合法请求仍使用原有父对象、自动销毁、取消按钮和显示流程。错误路径的窗口数量归零,正常回环检测的执行行为保持不变。
截图中 intra-session 与 inter-session 均未启用,回环检测没有任何合法搜索范围;但空白进度窗口已经覆盖 DatabaseViewer,既不会推进,也无法经过正常完成路径关闭。修复把参数校验前移,在创建对话框之前直接终止无效请求。