Qt 界面与切页优化 - NUSNiuMu/insight-capture-dashboard GitHub Wiki
原生客户端参照网页版 web_dashboard/src/styles.css 的暖纸色主题:纸色页面、白色卡片、琥珀色主操作、深青色数据值,绿色与红色分别表示正常和异常。入口顺序与功能接口保持一致。
ui/Theme.qml 集中管理色值与字体。Inter 字体从仓库已有网页字体转换为 Qt 可加载的 TTF,中文使用系统字体回退;数据与编号使用 DejaVu Sans Mono。ui/ 内共用按钮、输入框、下拉菜单、复选框、滑块、进度条、弹窗、卡片、状态标签和统计卡片,统一悬停、焦点与禁用状态。
后续页面使用 PageFrame 的标题和边距、Ui.Section 的业务分组与 Ui.Panel 的容器。主要操作使用 highlighted,破坏性操作使用 tone: "danger"。不要把颜色和默认方块控件重新散落到各页。
- 侧边栏采用品牌标识、工作区卡片、编号按钮和活动指示;窄窗口收为编号导航。较低的窗口隐藏工作区介绍,留出导航空间。
- 顶栏只显示当前工作区与连接状态;预览帧率和 3D 帧率仅在空间页显示。
- 任务页提供质量统计卡片,录制库使用状态标签,评分提供相机评分卡片。
- 数据集分为录制选择与导出配置;设置分为相机、遮罩、语音与维护。宽窗口分栏,较窄窗口堆叠显示。
- 录制、优化、手部提取按操作步骤分组;视频区域采用暗色背景,页面和空间场景保留暖色主题。
资源嵌入 Native 可执行文件,启动脚本仍为 ./native_dashboard/run.sh,源码更新时自动构建。主题不增加后台扫描、ROS 操作、三维渲染循环或视频处理依赖。
验证使用独立显示和模拟后端检查九页加载、下拉选择、弹窗、表单、错误恢复、处理结果、录制跨页保护与不同尺寸布局;截图是模拟数据,用于界面检查。实际相机画质与显示延迟仍按原生采集验收流程检查。
八个工作页面采用异步首次创建与控件复用,空间页保持原有实例;返回页面保留输入、选择和结果。录制库与能力信息缓存 60 秒,任务、运行与相机目录缓存 15 秒,其他状态缓存 2 秒。显式刷新和成功的业务修改会重新读取;录制状态、任务状态变化也使对应缓存失效。失效或目录范围切换发生在请求途中时,旧响应不成为有效缓存,随后读取最后选择的范围。导出选择会移除已删除的录制。
工作区数据按命名空间通知 QML,仅更新实际变化的值,避免某页进度轮询重新计算所有缓存页面。隐藏的空间页持续消费轨迹增量和保留轨迹,暂缓场景属性通知与几何生成,返回时统一恢复最新数据。
实时视频连接和解码管线在隐藏时保留,省去 GUI 线程上的同步销毁及返回时初始化。H.264 继续解码以维护引用帧,隐藏时丢弃解码后的显示输出;原始图像/JPEG 不需要引用链,直接跳过隐藏期间的显示处理。返回后等 sink 计数出现新输出再显示子窗口,避免暴露上次停留的画面。保留 H.264 解码会持续占用解码资源,这是换取快速返回的取舍;有界队列和现有过期输入策略保持生效。MP4 隐藏时暂停,返回恢复用户先前的播放/暂停状态,正常 DPB 不变。
2026-10-12 的独立验证记录:
| 验证 | 结果 |
|---|---|
| 4 秒模拟录制库响应,连续 31 次切换 | 八页各创建一次,共用录制库只扫描一次;缓存切页首次 Qt 帧交换中位 12 ms,最大 20 ms |
| 隐藏期间的增量轨迹 | 序号从 75 增至 90,几何更新保持 34 次;返回后接续至 289,无增量断层 |
| 六路模拟视频,同机旧/新实现对照 | 切离空间页首次 Qt 帧交换旧版 784–1025 ms,新版 63–80 ms;返回旧版 63–100 ms,新版 14–22 ms |
| 新版六路视频四轮返回 | 管线 generation 全程不变;返回至新 sink 输出 33–159 ms,中位 76.5 ms;隐藏期间 raw 跳过、H.264 输出丢弃且 rendered 计数不增长 |
| 缓存一致性 | 扫描途中从当前目录切回全部目录后使用最后选择;实际 Workspace 网络测试验证范围合并、请求途中全局失效、TTL 复用与单键失效 |
| MP4 回放 | 跨页保持时间、返回继续、手动暂停跨页保留、拖动至 5 秒、返回六路实时全部通过 |
| 页面尺寸 | 1600×1000、1280×800、1152×864 九页加载与横向边界通过;后者使用紧凑侧边栏 |
Qt 帧交换表示页面绘制提交,sink 计数表示新视频输出,均不等同于曝光到屏幕的光学延迟。六路视频使用保存的 H.264 与生成的 raw 图像,不能当作六路当前实物输入的验收。旧版对照仅增加相同计时诊断,保留原切页逻辑;旧版四轮点击有一轮未形成页面切换,表中只统计实际产生的帧交换事件。
使用 --diagnostics <path> 可读取 page_frames、navigation、workspace_requests 和视频的 generation、resume_to_render_ms、hidden_output_drops、hidden_raw_skips。验证脚本、请求、诊断、截图和可执行文件保存于 ~/workspaces/insight_capture_tests/native_ui_20261012/,不进入主仓库。
源码:native_dashboard。
完整性报告按网页版展示结论、失败话题与紧凑话题表格;评分卡片只展示质量指标,录制页只展示操作相关状态。静态/事件话题不按普通帧率误报;无结果时不产生空报告;评分与录制库结果隔离。录制合并保存期间禁止开始录制和切换目录。
30 组 QML 页面/尺寸/异常检查与完整 Native HTTP/WS 流程通过,现场评分和录制页已读取验证,六路视频恢复后关闭持续诊断。代码、构建与当前窗口均更新,采集后台未重启。提交 e9733db,详细验证见 10 月变更记录。