From 32878a9a80e5be2b36627cf121e2cd31673006ad Mon Sep 17 00:00:00 2001 From: xu <1012118331@qq.com> Date: Thu, 10 Sep 2026 14:10:40 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E6=A3=80=E9=A1=B5=E9=9D=A2=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QT界面详细设计说明书.docx | Bin 140518 -> 0 bytes QT界面详细设计说明书.md | 1241 ----------------- app/global.cpp | 37 + app/global.h | 21 + .../clangd/index/QColor.6F0D1A6DAE47D585.idx | Bin 0 -> 202 bytes .../index/QFontMetrics.0B12EDFFD35A3199.idx | Bin 0 -> 214 bytes ...phicsDropShadowEffect.356DEEDE386B2BA1.idx | Bin 0 -> 238 bytes .../bootpassword.cpp.2880E253A763ABEF.idx | Bin 5386 -> 5296 bytes .../confirmdialog.cpp.A07B26C68894B406.idx | Bin 4012 -> 4012 bytes .../index/global.cpp.3110D8C4024B8807.idx | Bin 2818 -> 4256 bytes .../index/global.h.04FEB1AA1BE5CBA9.idx | Bin 8058 -> 9356 bytes .../ledindicator.cpp.9844B6B5BDCBA69A.idx | Bin 3740 -> 4180 bytes .../index/ledindicator.h.736A1ED2611C89E9.idx | Bin 2514 -> 2856 bytes .../index/main.cpp.8917E40B8BB3DA8C.idx | Bin 644 -> 668 bytes .../index/mainwindow.cpp.939E08F5B3723232.idx | Bin 6324 -> 6324 bytes ...passwordmgmtlogin.cpp.AF231AAA0CBB48FC.idx | Bin 4558 -> 4558 bytes .../passwordreset.cpp.1B25930C84FBC9DF.idx | Bin 5098 -> 5356 bytes .../passwordreset.h.02991F109F376ECC.idx | Bin 1676 -> 1844 bytes .../qgraphicseffect.h.A493CFD84F8BD4D5.idx | Bin 0 -> 13544 bytes .../index/selfcheck.cpp.776FCF2AC614C2A9.idx | Bin 8042 -> 8346 bytes .../index/selfcheck.h.2647BC27006C5072.idx | Bin 2658 -> 2728 bytes .../index/titlebar.cpp.C884912AA7BAF5D8.idx | Bin 4356 -> 4724 bytes .../Makefile.Debug | 203 ++- .../Makefile.Release | 203 ++- .../object_script.wuhan.Debug | 1 + .../object_script.wuhan.Release | 1 + main.cpp | 1 + mainwindow.cpp | 4 +- pages/selfcheck.cpp | 147 +- pages/selfcheck.h | 3 + widgets/ledindicator.cpp | 16 +- widgets/ledindicator.h | 7 +- widgets/titlebar.cpp | 55 +- 界面设计可视化预览(HTML).html | 223 --- 34 files changed, 595 insertions(+), 1568 deletions(-) delete mode 100644 QT界面详细设计说明书.docx delete mode 100644 QT界面详细设计说明书.md create mode 100644 build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/QColor.6F0D1A6DAE47D585.idx create mode 100644 build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/QFontMetrics.0B12EDFFD35A3199.idx create mode 100644 build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/QGraphicsDropShadowEffect.356DEEDE386B2BA1.idx create mode 100644 build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/qgraphicseffect.h.A493CFD84F8BD4D5.idx delete mode 100644 界面设计可视化预览(HTML).html diff --git a/QT界面详细设计说明书.docx b/QT界面详细设计说明书.docx deleted file mode 100644 index 337af6edb2ea3536d18884b8cd8ab58ae804dc16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140518 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

OkVwp6u8h!$TK{+^`W}@2Fz%VPV<^PxBfO> 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μvI43fkIBQ_o80daT`gnO3uXptiQ3S=!Xd# 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 R|8oMIfF<~Z 本文件为 Word 交付版的文本镜像,可直接用 VSCode 打开;线框图为等宽字符示意, -> 全部内容(布局/坐标/字号/配色/交互逻辑)与 Word 版一致,适合直接粘贴给 DeepSeek 生成 QT 代码。 - -## 目录 - -- [1 文档说明](#1-文档说明) -- [2 总体设计规范](#2-总体设计规范) -- [3 界面详细设计](#3-界面详细设计) -- [4 公共组件设计](#4-公共组件设计) -- [5 数据与通信接口约定](#5-数据与通信接口约定) -- [6 待确认事项清单](#6-待确认事项清单) -- [附录A 交给 DeepSeek 的提示词模板](#附录A-交给-DeepSeek-的提示词模板) -- [附录B 界面原型映射说明](#附录B-界面原型映射说明) - - [1.1 目的与用途](#1.1-目的与用途) - - [1.2 依据与范围](#1.2-依据与范围) - - [1.3 术语表](#1.3-术语表) - - [1.4 使用方法(交付 DeepSeek 的流程)](#1.4-使用方法(交付-DeepSeek-的流程)) - - [2.1 运行环境与画布](#2.1-运行环境与画布) - - [2.2 工业风格配色体系](#2.2-工业风格配色体系) - - [2.3 字体与字号规范](#2.3-字体与字号规范) - - [2.4 通用控件规范](#2.4-通用控件规范) - - [2.5 输入方式与焦点机制](#2.5-输入方式与焦点机制) - - [2.6 页面公共框架](#2.6-页面公共框架) - - [2.7 全局状态与互斥规则](#2.7-全局状态与互斥规则) - - [2.8 页面导航总图](#2.8-页面导航总图) - - [界面③ 开机密码界面(含密码流程子界面)](#界面③-开机密码界面(含密码流程子界面)) - - [界面④ 自检界面(系统启动及自检)](#界面④-自检界面(系统启动及自检)) - - [界面⑤ 作业选择界面](#界面⑤-作业选择界面) - - [界面⑥ 机器人底盘界面](#界面⑥-机器人底盘界面) - - [界面⑦ 机械臂界面](#界面⑦-机械臂界面) - - [界面⑧ 气体检测仪界面](#界面⑧-气体检测仪界面) - - [界面⑨ 手动消除界面](#界面⑨-手动消除界面) - - [界面⑩ 手动消毒界面](#界面⑩-手动消毒界面) - - [界面⑪ 调试维护界面](#界面⑪-调试维护界面) - - [界面⑫ 故障查询界面](#界面⑫-故障查询界面) - - [4.1 TitleBar(顶条组件)](#4.1-TitleBar(顶条组件)) - - [4.2 StatusStrip(底部状态条)](#4.2-StatusStrip(底部状态条)) - - [4.3 LedIndicator(指示灯)](#4.3-LedIndicator(指示灯)) - - [4.4 NumPadDialog(数字键盘弹窗)](#4.4-NumPadDialog(数字键盘弹窗)) - - [4.5 ConfirmDialog(确认弹窗)](#4.5-ConfirmDialog(确认弹窗)) - - [4.6 AlarmBanner(告警横幅)](#4.6-AlarmBanner(告警横幅)) - - [4.7 ParamControl(参数调节控件)](#4.7-ParamControl(参数调节控件)) - - [4.8 DataCard(数据卡片)](#4.8-DataCard(数据卡片)) - - [4.9 FaultTable(故障分页表格)](#4.9-FaultTable(故障分页表格)) - -# 1 文档说明 - -## 1.1 目的与用途 - -本文档是“铣削机器人(图数一体机)”遥控端触摸屏 QT 界面开发的完整界面规格说明书,覆盖《技术协议(初版)》第③~⑫项共 10 个界面:③开机密码界面(含密码警告、密码管理登录、密码管理、密码重置 4 个子界面)、④自检界面、⑤作业选择界面、⑥机器人底盘界面、⑦机械臂界面、⑧气体检测仪界面、⑨手动消除界面、⑩手动消毒界面、⑪调试维护界面、⑫故障查询界面。 - -文档面向两类读者:一是代码生成模型(如 DeepSeek),可据此直接编写 QT 界面程序(控件、布局、配色、交互逻辑、数据绑定均有明确规格);二是项目开发与评审人员,用于界面评审与验收。 - -文档编写原则:协议原文要求逐条落位(文中以黑体加粗引用);协议未明确、属于设计补充的内容一律标注【设计建议】,供开发时取舍或与甲方确认。 - -## 1.2 依据与范围 - -依据文件:《铣削机器人(图数一体机)技术协议(初版)_20260728》,产品名称为“玉兔”工业无线遥控器,产品型号 YTZT6K8EART2-aL25。遥控器面板含触摸屏、物理摇杆、机械旋钮(行车/机械臂模式)、参数设置旋钮、多功能光标旋钮(旋转+顶部按键)、紧急停机旋钮及方向/末端按键,协议第①②项为面板结构、⑬接收器线束、⑭整车控制协议、⑮其他配件,不在本说明书界面开发范围内;整车控制协议详见《洗消机器人遥控器通信协议0708》。 - -界面原型:协议文档内嵌浅色界面示意图(开机密码、自检、作业选择、底盘、机械臂、气体检测仪、手动消除、手动消毒、调试维护、故障查询)。本文档保留原型的布局与字段命名,按用户要求将视觉风格优化为深色工业风格(见第 2 章配色体系)。 - -## 1.3 术语表 - -**表1-1 术语表** - -| 术语 | 含义 | -|---|---| -| 图数一体机 | 集图形显示与数据控制于一体的遥控设备(本文指遥控器手持端) | -| 遥控端/手持端 | 操作人员手持的遥控器,运行 QT 界面程序 | -| 车载端 | 机器人本体控制系统,经 CAN 总线与遥控端通信 | -| D1、D2 | 洗消系统两个电动球阀(药液/清水通路阀门) | -| 柱塞泵/空压机/叶片泵 | 洗消系统执行部件:药剂泵、气源泵、发泡泵 | -| 行车/机械臂模式 | 遥控器面板机械旋钮切换的操作模式,决定底盘、机械臂可否操作 | -| 光标/焦点 | 界面中由多功能光标旋钮驱动的可聚焦控件高亮框 | -| 急停 | 紧急停机:物理急停旋钮或界面软急停按钮,触发后底盘、机械臂、洗消系统立即停止 | - -## 1.4 使用方法(交付 DeepSeek 的流程) - -将本文档全文(或第 2~5 章及附录A)粘贴/上传给 DeepSeek,并附上附录A的提示词模板开头,即可让模型按本文档逐界面生成 QT 代码。文档中【设计建议】项允许模型在实现时按工程惯例取舍,但协议原文要求(黑体加粗)不得改动。 - -# 2 总体设计规范 - -## 2.1 运行环境与画布 - -**表2-1 运行环境约定** - -| 项目 | 约定 | -|---|---| -| GUI 框架 | Qt 5.15 LTS / Qt 6.x,Widgets 模块(QWidget + QSS 样式表);亦可 PySide6/PyQt5 实现 | -| 画布分辨率 | 1920×1080(横屏),全屏无边框窗口;分辨率用全局常量 SCREEN_W=1920、SCREEN_H=1080 定义;若部署在更低分辨率屏,按同一比例整体缩放 | -| 输入设备 | 电容触摸屏;物理摇杆(左/右);机械旋钮(模式);参数设置旋钮;多功能光标旋钮(旋转=移动光标/调值,顶部按键=确认);紧急停机旋钮 | -| 通信 | 与车载端经 CAN 总线通信,UI 层通过通信层回调/信号接收数据(信号名称见第 5 章占位表) | -| 存储 | 参数(车速、柱塞泵流量、发泡倍数、泡沫比例、空压机流量)与密码、故障历史写入本地存储区,上电自动读取 | -| 开发约定 | 所有页面继承统一基类 BasePage;页面切换用 QStackedWidget;公共组件复用(见第 4 章) | - -## 2.2 工业风格配色体系 - -协议内嵌原型为浅色界面,按工业操控终端惯例优化为深色高对比主题:深蓝灰底、浅色文字、蓝/绿/琥珀/红四色语义固定。所有颜色值以 QSS 十六进制为准。 - -**表2-2 工业风格配色体系** - -| 色名 | 用途 | 十六进制 | 使用位置 | -|---|---|---|---| -| 主背景 | 窗口画布底色 | #161C23 | 全屏背景 | -| 面板背景 | 卡片/弹窗/顶条/底条 | #242E3A | 数据卡片、标题条、弹窗 | -| 面板亮色 | 按钮常态、表头 | #2D3947 | 普通按钮、表头、进度条底 | -| 分割线 | 边框、表格线 | #3D4A59 | 卡片边框、表格网格、输入框边框 | -| 主文字 | 标题、正文、数值 | #E6EDF3 | 各级标题与正文 | -| 次文字 | 说明、单位、标签 | #9AA7B4 | 字段标签、单位、次要信息 | -| 强调主色 | 主按钮、选中、焦点 | #3D8BFD | 主操作按钮、选中态、焦点框、进度条 | -| 成功/运行 | 运行、开启、到位 | #36C75A | 指示灯绿色态、通信正常、自检正常 | -| 警告 | 提醒、待确认 | #F5A623 | 待机提醒、注意类提示 | -| 危险/故障 | 急停、故障、警示 | #E5484D | 急停按钮、故障灯、警示文字、自检异常 | -| 禁用 | 不可操作控件 | #56636F | 禁用按钮底色 | -| 禁用文字 | 不可操作文字 | #6B7A88 | 禁用按钮文字 | - -配色使用原则:①深底浅字高对比,保证车间强光、暗光环境可读;②色彩语义全系统固定——绿色=运行/开启/到位/正常,红色=故障/停止/急停/警示,琥珀=提醒,蓝色=操作与选中,任何页面不得混用;③协议要求“警示字体都为红色”,所有警告、故障文字统一使用危险红并在 500ms 周期闪烁;④按钮禁用一律置灰(背景#56636F、文字#6B7A88)。 - -## 2.3 字体与字号规范 - -**表2-3 字体与字号规范** - -| 用途 | 字体(建议) | 字号(px) | 说明 | -|---|---|---|---| -| 页面标题(顶条) | 微软雅黑/思源黑体CN | 28 | 加粗 | -| 卡片标题 | 微软雅黑/思源黑体CN | 20 | 加粗 | -| 正文/按钮文字 | 微软雅黑/思源黑体CN | 18 | 触屏可读下限 | -| 次要说明/单位 | 微软雅黑/思源黑体CN | 16 | 标签、单位 | -| 大数值显示 | Arial/等线(DIN) | 40~64 | 加粗,用于浓度、流量、压力等 | -| 状态小字 | 微软雅黑/思源黑体CN | 20 | 指示灯旁文字 | - -注:以上为 1920×1080 屏的推荐值;设备端最终字体以系统可用字体为准,代码中用 QFont 常量统一定义;文档线框图字体为宋体等宽。 - -## 2.4 通用控件规范 - -按钮状态视觉规范: - -**表2-4 按钮状态规范** - -| 状态 | 背景 | 文字 | 边框 | 适用 | -|---|---|---|---|---| -| 普通 | #2D3947 | #E6EDF3 | #3D4A59 | 普通按钮 | -| 悬停 | #3D8BFD(20%叠加) | #E6EDF3 | #3D8BFD | 触摸悬停/光标悬停 | -| 按下 | #3D8BFD | #FFFFFF | #3D8BFD | 按压反馈 | -| 选中/激活 | #3D8BFD | #FFFFFF | 无 | 模式激活、图标选中 | -| 禁用 | #56636F | #6B7A88 | #56636F | 条件不满足时 | -| 危险(急停/停止) | #E5484D | #FFFFFF | #E5484D | 急停、停止、清除类 | - -控件通用规则:主操作按钮圆角 12px、最小尺寸 140×76px;急停按钮圆角 6px、最小 130×64px,常驻顶条右侧;触控目标最小 88×88px。输入框深底(#161C23)、2px 边框(#3D4A59),聚焦时边框 3px 主色。指示灯为圆形 32×32px,三态:灰(#56636F)=未运行/关闭/正常,绿(#36C75A)=运行/开启/到位,红(#E5484D)=故障/液位低,红色状态按 500ms 周期闪烁(透明度 40%↔100%)。弹窗:遮罩 #00000066,面板 #242E3A,圆角 16px,2px 边框,居中弹出。数据卡片:面板背景、圆角 12px、标题栏高 44px,内容为“标签:值”行(标签次文字、值主文字加粗)。表格:表头面板亮色、行高 54px、选中行主色 15% 叠加、隔行斑马纹 #2A3442。进度条:底 #2D3947、值段主色,文本白色居中覆盖。 - -## 2.5 输入方式与焦点机制 - -①触摸:直接点击控件触发。②多功能光标旋钮:旋转在可聚焦控件之间移动焦点框(2px 主色外框 + 外发光),顶部按键触发确认;旋钮旋转同时用于参数加减(如转速、流量),步进值见各界面。③参数设置旋钮:在参数设置界面直接调节当前高亮参数。④物理摇杆(左/右):底盘行驶、机械臂运动,界面同步显示摇杆方向状态。⑤机械旋钮:切换“行车模式/机械臂模式”,界面显示当前模式徽标。⑥软急停按钮:触摸点击。 - -【设计建议】QT 实现时统一封装 InputManager:将多功能光标旋钮旋转映射为方向键(上/下/左/右)、顶部按键映射为回车键,触摸点击与按键共用同一套槽函数,保证“触摸可用、旋钮光标可用”双通道一致。 - -## 2.6 页面公共框架 - -所有工作页(⑤~⑪)共用以下框架(密码页、自检页、故障查询页按各自布局):(1)顶条(高 98px,y=0):左侧“通信状态:●正常”(绿色圆点)或“通信异常”(红色闪烁);中央页面标题(40px 加粗);右侧时间(HH:MM,22px)与软急停按钮(130×64,红底白字“急停”)。(2)底部状态条(高 94px,y=986):底盘电量、底盘电压、清水液位、泡沫液位四个迷你指示(图标+数值,异常红闪);当前模式徽标(行车模式/机械臂模式);右下角统一“返回”按钮(144×76)。(3)告警横幅:位于标题下方(y=108),红色文字 500ms 闪烁,用于“机械臂未回位,请谨慎操作”“通信异常”“警告:该模式下无保护功能,操作请谨慎!”等警示。(4)闪烁规则统一:QTimer 500ms 定时器切换控件可见性或透明度(40%↔100%)。 - -## 2.7 全局状态与互斥规则 - -**表2-5 全局状态与互斥规则** - -| 状态 | 规则 | -|---|---| -| 通信状态 | 全局状态位;异常时顶条“通信异常”红色闪烁,所有页面上报数据置灰并保留最后有效值 | -| 急停 | 全局状态位;触发后底盘、机械臂、洗消系统立即停止,界面弹出红色急停横幅,需人工复位后才可恢复操作 | -| 行车/机械臂模式 | 面板机械旋钮切换;底盘页仅行车模式下可执行行驶操作;机械臂页仅机械臂模式下可执行关节操作 | -| 手动消除/消毒模式 | 进入⑨⑩页面后,底盘与机械臂所有手动操作无效,界面相关按钮禁用;洗消过程中机械手末端自动俯仰摆动 | -| 返回规则 | ⑨⑩在运行中“返回”无效(需先停止);其余页面随时可返回作业选择界面 | - -## 2.8 页面导航总图 - -```text -┌──────────────────────────────────────────────┐ -│              ③开机密码界面 (密码“6789”)              │ -│              │ 密码正确    │ 忘记/修改密码             │ -│                  ▼         ▼                 │ -│          ④系统自检界面  ③密码管理登录→密码管理→密码重置          │ -│                  │ 自检完成/忽略故障                 │ -│                       ▼                      │ -│           ⑤作业选择界面 (中央显示电量/电压/液位等)            │ -│        ┌────┬────┬────┬────┬────┬────┐       │ -│             ▼   ▼   ▼   ▼   ▼   ▼            │ -│      ⑥底盘 ⑦机械臂 ⑧气体检测仪 ⑨手动消除 ⑩手动消毒 ⑪调试维护       │ -│     ⑫故障查询:从④自检页“故障查询”按钮进入,也可在⑤增设入口【设计建议】     │ -│           工作页“返回”→⑤作业选择;⑨⑩仅在停止后允许返回          │ -│              全局:任意页面触发急停→全系统立即停止             │ -└──────────────────────────────────────────────┘ -``` - -页面跳转实现约定:QStackedWidget 管理全部页面索引,统一 PageRouter 提供 go(page)、back() 接口;返回目标固定为作业选择界面(⑤),密码流程子页面返回逻辑见 3.1。 - -# 3 界面详细设计 - -以下 10 个界面均基于协议原文要求与协议内嵌原型图设计。每个界面按统一模板展开:功能概述(含协议原文引用)、界面布局线框、分区说明、控件清单、运行状态机、交互逻辑、数据与信号绑定。控件坐标以画布 1920×1080 左上角为原点,格式为(x, y, w, h)。 - -## 界面③ 开机密码界面(含密码流程子界面) - -### 3.1.1 功能概述 - -协议要求:开机进入开机密码界面,手动点击密码输入框,弹窗数字键盘,输入正确密码后,点击确认按钮,进入自检界面;若输入密码有误,点击确认按钮后,跳转至错误密码警告界面,重新输入密码。忘记密码/需要修改密码,可以进行密码重置。开机密码为“6789”。(原型确认密码为 4 位数字,重置流程 4 步:密码管理界面→重置密码界面→输入新密码→确认弹窗“修改成功”2 秒后消失→退出返回开机密码界面。) - -【设计建议】本界面由 5 个子界面组成:开机密码主界面、密码警告界面、密码管理登录界面、密码管理界面、密码重置界面;全部为全屏居中布局,不显示顶条/底条;顶部品牌区显示产品名与型号(厂家 LOGO 以文字占位)。 - -### 3.1.2 界面布局(线框示意) - -```text -┌──────────────────────────────────────────────┐ -│       【“玉兔”工业无线遥控器 YTZT6K8EART2-aL25】        │ -│                                              │ -│                   请输入开机密码                    │ -│       ┌──────────────────────────────┐       │ -│       │● ● ● ●                       │       │ -│       └──────────────────────────────┘       │ -│            密码输入有误,请重新输入(红色,默认隐藏)             │ -│          ┌────────┐      ┌────────┐          │ -│          │确认      │      │取消      │          │ -│          └────────┘      └────────┘          │ -│            忘记密码/修改密码(链接,点击进入密码管理)            │ -│                                              │ -│         (点击密码输入框弹出数字键盘:1-9、0、退格、清除)          │ -└──────────────────────────────────────────────┘ -``` - -线框为开机密码主界面。密码警告/密码管理登录/密码管理/密码重置 4 个子界面共用同一版式:顶部标题 + 中部输入框(或选项区)+ 底部操作按钮行,仅标题与按钮不同。 - -### 3.1.3 分区与子界面说明 - -**表3-1 密码流程子界面说明** - -| 子界面 | 标题 | 中部内容 | 操作按钮 | 跳转关系 | -|---|---|---|---|---| -| 开机密码(主) | 请输入开机密码 | 4 位密码输入框(●掩码)+错误提示(初始隐藏) | 确认/取消+忘记密码链接 | 正确→④自检;错误→密码警告;忘记→密码管理登录 | -| 密码警告 | 密码输入有误,请重新输入 | 红色警示大字(26px 加粗) | 重新输入 | →返回开机密码主界面,清空输入 | -| 密码管理登录 | 密码管理登录界面 | 管理员密码输入框(4 位●掩码) | 确认/取消 | 正确→密码管理界面;错误→红字提示 | -| 密码管理 | 密码管理界面 | 功能选项列表:重置密码功能(√ 勾选) | 确认/退出 | 确认→密码重置界面;退出→开机密码主界面 | -| 密码重置 | 重置密码界面 | 新密码输入框(4 位)+“请输入4位有效密码”提示 | 确认/取消/退出 | 确认→弹窗“修改成功”2s 自动消失;退出→开机密码主界面 | - -### 3.1.4 控件清单 - -**表3-2 开机密码界面控件清单** - -| ID | 控件 | 文本/取值 | 位置(x,y,w,h) | 初始状态 | 交互与样式要点 | -|---|---|---|---|---|---| -| P1 | QLineEdit | 密码 ●●●●(掩码) | (440,340,400,88) | 空 | 只读回显;点击弹出数字键盘;限 4 位;圆角 8px、聚焦边框主色 2px | -| P2 | QPushButton | 确认 | (440,560,180,72) | 可用 | 主色按钮;校验密码;防连点(校验中禁用 1s) | -| P3 | QPushButton | 取消 | (660,560,180,72) | 可用 | 清空输入框 | -| P4 | QLabel | 密码输入有误,请重新输入 | (240,470,800,40) | 隐藏 | 红色 18px 加粗,居中 | -| P5 | QPushButton | 忘记密码/修改密码 | (440,700,400,44) | 可用 | 链接样式(无边框、主色文字)→密码管理登录 | -| P6 | NumPadDialog | 数字键盘 | 弹窗 960×486 | — | 见 4.4;数字键 130×98、36px;退格/清除 | -| Q1 | 子页-密码警告 | 重新输入 | 全屏 | — | 红色大字居中+1 个主色按钮 | -| Q2 | 子页-密码管理登录 | 管理员密码 ●●●● | 全屏 | — | 输入框+确认/取消 | -| Q3 | 子页-密码管理 | 重置密码功能 □√ | 全屏 | 勾选√ | 选项行+确认/退出 | -| Q4 | 子页-密码重置 | 新密码 ●●●● | 全屏 | — | 输入框+确认/取消/退出;成功弹窗 2s | - -### 3.1.5 运行状态机 - -**表3-3 开机密码界面状态机** - -| 状态 | 可用操作 | 禁用/限制 | 提示与显示 | -|---|---|---|---| -| 待输入 | 点击输入框、确认、取消、忘记密码 | — | 输入框聚焦 | -| 键盘弹出 | 数字键、退格、清除、键盘确认 | 背景操作 | 输入框同步显示 ● | -| 校验中 | — | 确认按钮 | 防连点 1s | -| 校验通过 | — | — | 跳转④自检界面 | -| 校验失败 | 跳转密码警告 | — | 输入清空 | -| 密码警告页 | 重新输入 | — | 红色警示 | -| 锁定(连续 5 次错误) | 无 | 全部输入 | 倒计时 30s 后自动解锁【设计建议】 | - -### 3.1.6 交互逻辑 - -**表3-4 开机密码界面交互逻辑** - -| 步骤 | 用户操作 | 系统行为与结果 | -|---|---|---| -| 1 | 点击密码输入框 | 弹出数字键盘(模态,遮罩 #00000066) | -| 2 | 依次点击数字键 | 输入框显示 ●,最多 4 位;超过 4 位忽略 | -| 3 | 点击退格/清除 | 删除末位/全部清空 | -| 4 | 点击确认(键盘或页面) | 与存储区密码(初始“6789”)比对:正确→跳转④自检界面;错误→跳转密码警告界面并清空输入 | -| 5 | 密码警告页点击“重新输入” | 返回开机密码主界面,输入框自动聚焦 | -| 6 | 点击“忘记密码/修改密码” | 跳转密码管理登录界面 | -| 7 | 密码管理登录输入管理员密码+确认 | 正确→密码管理界面;错误→红字提示(3s) | -| 8 | 密码管理界面勾选“重置密码功能”+确认 | 跳转重置密码界面 | -| 9 | 重置密码输入 4 位新密码+确认 | 校验(4 位数字)通过→弹窗“修改成功”,2s 后自动消失;新密码写入存储区 | -| 10 | 重置密码界面点击“退出” | 返回开机密码主界面 | -| 11 | 任意子界面点击取消 | 清空当前输入框,停留当前页 | -| 12 | 连续 5 次输入错误【设计建议】 | 锁定 30s:输入框与按钮禁用,倒计时提示 | - -### 3.1.7 数据与信号绑定 - -**表3-5 开机密码界面数据绑定** - -| 字段 | 显示位置 | 数据来源(占位) | 刷新/显示规则 | -|---|---|---|---| -| 开机密码 | 校验逻辑 | stored_param('pwd'),初始 6789 | 上电读取;重置成功后写回 | -| 管理员密码 | 密码管理登录校验 | stored_param('admin_pwd') | 初始与开机密码一致【待确认】 | -| 错误计数/锁定时间 | 锁定提示 | 内存变量 | 5 次触发;30s 倒计时刷新 | - -## 界面④ 自检界面(系统启动及自检) - -### 3.2.1 功能概述 - -协议要求:自检过程主要检测各分系统通信、各个传感器信号数据是否正常及电动球阀 D1~D2 是否能正常开启和关闭。电动球阀在执行开启或关闭动作后,若收到总线上关于 D1~D2 故障信号,则发出“电动球阀 D1 开启故障”或“电动球阀 D1 关闭故障”等故障提示。自检完成后进入“作业选择界面”。 - -原型布局:左上角自检状态大字(自检完成/无法完成自检 请检查设备),中央自检项日志列表(含进度条),左侧“故障查询/忽略故障”按钮,右侧“操作说明/启动自检/作业选择”按钮。 - -### 3.2.2 界面布局(线框示意) - -```text -┌──────────────────────────────────────────────┐ -│通信●正常 │【自检界面】      时间  急停      │              │ -├──────────────────────────────────────────────┤ -│故障查询  │○通信系统    正常             │操作说明          │ -│忽略故障  │○底盘通信    正常             │启动自检          │ -│      │○机械臂通信   正常             │作业选择          │ -│      │○洗消通信    正常             │              │ -│      │○传感器信号   正常             │              │ -│      │○清水液位    正常             │              │ -│      │○球阀D1开启  正常             │              │ -│      │○球阀D1关闭  正常             │              │ -│      │○球阀D2开启  正常             │              │ -│      │○球阀D2关闭  正常             │              │ -│      │进度:0%(0/10)             │              │ -└──────────────────────────────────────────────┘ -``` - -说明:线框为结构示意(画布 1920×1080),控件精确坐标以 3.2.3 分区说明与 3.2.4 控件清单为准。 - -### 3.2.3 分区说明 - -| 区域 | 位置(x,y,w,h) | 内容 | 说明 | -|---|---|---|---| -| 状态区 | (0,0,1920,108) | 自检状态大字 | 正常绿字;异常红字 26px 加粗 | -| 自检项列表 | (360,162,1200,648) | 10 个自检项,两列 | 每项:名称+状态灯+结果文字;检测中黄闪、正常绿、异常红 | -| 进度条 | (360,836,1200,54) | 自检进度 0~100% | 主色填充,白色百分比文字覆盖 | -| 左按钮列 | (36,756,270,216) | 故障查询/忽略故障 | 忽略故障仅异常时可用 | -| 右按钮列 | (1614,756,270,270) | 操作说明/启动自检/作业选择 | 作业选择仅完成或忽略后可用 | - -### 3.2.4 控件清单 - -| ID | 控件 | 文本/取值 | 位置(x,y,w,h) | 初始状态 | 交互与样式要点 | -|---|---|---|---|---|---| -| S1 | QLabel | 自检状态文字 | (72,32,600,64) | 自检中(琥珀) | 正常绿/异常红闪 | -| S2 | 自检项列表(10 组) | 项名+LedIndicator+结果 | (360,162,1200,648) | — | 组高 62px;动作后回读结果 | -| S3 | QProgressBar | 0~100% | (360,836,1200,54) | 0% | 主色填充,圆角 4px | -| S4 | QPushButton | 故障查询 | (36,756,270,98) | 可用 | →⑫故障查询界面 | -| S5 | QPushButton | 忽略故障 | (36,874,270,98) | 异常时可用 | →⑤作业选择界面 | -| S6 | QPushButton | 操作说明 | (1614,756,270,98) | 可用 | 弹窗显示自检项说明【预留】 | -| S7 | QPushButton | 启动自检 | (1614,874,270,98) | 可用 | 复位所有项并重新自检 | -| S8 | QPushButton | 作业选择 | (1614,982,270,98) | 完成/忽略后可用 | →⑤作业选择界面 | - -### 3.2.5 运行状态机 - -| 状态 | 可用操作 | 禁用/限制 | 提示与显示 | -|---|---|---|---| -| 待自检 | 启动自检 | 其余按钮 | 进度 0% | -| 自检中 | 无 | 除启动自检外全部禁用 | 各项目黄闪,进度递增 | -| 全部正常 | 作业选择 | 忽略故障隐藏 | 绿字自检完成 | -| 存在异常 | 故障查询/忽略故障/启动自检/作业选择 | — | 红字无法完成自检 | - -### 3.2.6 交互逻辑 - -| 步骤 | 用户操作 | 系统行为与结果 | -|---|---|---| -| 1 | 点击任一自检按钮 | 进入对应界面或重新自检 | -| 2 | 检测每项时 | 状态灯黄闪(检测中)→绿(正常)或红(异常),结果文字同步 | -| 3 | 电动球阀 D1/D2 动作后收到故障信号 | 发出“电动球阀D1开启故障”/“电动球阀D1关闭故障”等故障提示,红色闪烁 | -| 4 | 全部自检正常 | 状态区绿字“自检完成”;2s 后自动进入作业选择界面【设计建议】 | -| 5 | 存在自检异常 | 状态区红字“无法完成自检 请检查设备”,异常项红闪 | -| 6 | 点击故障查询 | 进入⑫故障查询界面 | -| 7 | 点击忽略故障 | 进入⑤作业选择界面,异常项在对应卡片红闪 | -| 8 | 点击启动自检 | 清空结果、进度归零,重新自检 | - -### 3.2.7 数据与信号绑定 - -| 字段 | 显示位置 | 数据来源(占位) | 刷新/显示规则 | -|---|---|---|---| -| 各分系统通信状态 | 自检项列表 | on_comm_state 等 | 正常绿/异常红 | -| 传感器信号 | 自检项列表 | on_tank_level / on_wash_state | 正常/异常 | -| 球阀 D1/D2 动作结果 | 自检项列表 | on_ball_valve_state | 动作后回读 | -| 球阀故障 | 故障提示横幅 | fault 信号 | “电动球阀D1开启故障”等红闪 | - -## 界面⑤ 作业选择界面 - -### 3.3.1 功能概述 - -协议要求:此页面可选择“机器人底盘”、“机械臂”、“气体检测仪”、“手动消除”、“手动消毒”、“调试维护”进入各自作业界面,通过触摸控制或者物理旋钮结合界面中图标光标操作。中间区域显示底盘电量、电压以及液位等基本数据,如有故障会闪烁显示。 - -原型布局:左侧菜单 4 项(机器人底盘/机械臂/气体检测仪/调试维护),中央 4 张数据卡片(底盘、机械臂、洗消、气体检测仪),右侧“手动消除/手动消毒/返回”按钮。 - -### 3.3.2 界面布局(线框示意) - -```text -┌──────────────────────────────────────────────┐ -│通信●正常 │【作业选择】     时间  急停       │              │ -├──────────────────────────────────────────────┤ -│机器人底盘 │┌────底盘────┐┌───机械臂────┐│手动消除          │ -│      ││电量:85%    ││末端XYZ     ││              │ -│机械臂   ││电压:360V   ││姿态RX..    ││手动消毒          │ -│      ││故障:无      ││          ││              │ -│气体检测仪 │└──────────┘└──────────┘│返回            │ -│      │┌────洗消────┐┌───检测仪────┐│              │ -│调试维护  ││A液位:100L  ││点火S类2级    ││              │ -│      ││泡沫液位:30L  ││浓度300ppb  ││              │ -│      ││          ││          ││              │ -│      │└──────────┘└──────────┘│              │ -├──────────────────────────────────────────────┤ -│底盘电量:85%   │底盘电压:360V 清水液位:100L 泡沫液位:30L 行车模式 │ -└──────────────────────────────────────────────┘ -``` - -说明:线框为结构示意(画布 1920×1080),控件精确坐标以 3.3.3 分区说明与 3.3.4 控件清单为准。 - -### 3.3.3 分区说明 - -| 区域 | 位置(x,y,w,h) | 内容 | 说明 | -|---|---|---|---| -| 顶条 | (0,0,1920,98) | 通信状态/标题/时间/软急停 | 见 2.6 | -| 左侧菜单 | (36,162,224,810) | 4 个作业入口 | 机器人底盘/机械臂/气体检测仪/调试维护 | -| 中央卡片区 | (300,162,1170,810) | 4 张数据卡片 | 底盘、机械臂、洗消、气体检测仪;故障字段红闪 | -| 右侧按钮列 | (1530,162,354,810) | 手动消除/手动消毒 | 主色大按钮纵向排列 | -| 底部状态条 | (0,986,1920,94) | 电量/电压/液位/模式/返回 | 见 2.6;返回在此页隐藏或禁用(主菜单) | - -### 3.3.4 控件清单 - -| ID | 控件 | 文本/取值 | 位置(x,y,w,h) | 初始状态 | 交互与样式要点 | -|---|---|---|---|---|---| -| E1 | 菜单按钮 ×4 | 机器人底盘/机械臂/气体检测仪/调试维护 | (36,162,224,98),间距 18 | 可用 | 图标+文字;可被光标焦点选中 | -| E2 | DataCard ×4 | 底盘/机械臂/洗消/气体检测仪数据 | (300,162,570,378)等 | 只读 | 500ms 刷新;故障字段红闪 | -| E3 | QPushButton | 手动消除 | (1530,162,354,98) | 可用 | 主色大按钮 | -| E4 | QPushButton | 手动消毒 | (1530,276,354,98) | 可用 | 主色大按钮 | -| E5 | QPushButton | 返回 | (1710,994,144,76) | 隐藏/禁用 | 主菜单无上级页面 | -| E6 | QLabel 徽标 | 行车模式/机械臂模式 | 底部状态条 | 只读 | 当前模式显示 | - -### 3.3.5 运行状态机 - -| 状态 | 可用操作 | 禁用/限制 | 提示与显示 | -|---|---|---|---| -| 常态 | 6 个入口、返回(隐藏) | — | 中央数据实时刷新 | -| 故障存在 | 6 个入口、返回 | — | 对应卡片故障字段红闪 | - -### 3.3.6 交互逻辑 - -| 步骤 | 用户操作 | 系统行为与结果 | -|---|---|---| -| 1 | 点击 6 个作业入口之一 | 跳转对应作业界面(⑥⑦⑧⑨⑩⑪) | -| 2 | 多功能光标旋钮旋转 | 焦点在菜单/按钮间移动(2px 主色外框) | -| 3 | 光标旋钮顶部按键 | 触发当前焦点控件(等同点击) | -| 4 | 中央卡片数据刷新 | 500ms 定时器刷新;故障字段红闪 | -| 5 | 模式为手动消除/消毒时进入对应页 | 正常进入;进入后底盘/机械臂操作自动禁用 | - -### 3.3.7 数据与信号绑定 - -| 字段 | 显示位置 | 数据来源(占位) | 刷新/显示规则 | -|---|---|---|---| -| 底盘电量/电压/故障 | 底盘卡片 | on_chassis_state | 500ms;故障多条轮换红闪 | -| 机械臂末端位置/姿态 | 机械臂卡片 | on_arm_state | 500ms | -| 洗消液位(清水/泡沫) | 洗消卡片 | on_tank_level | 500ms | -| 气体检测仪状态 | 气体检测仪卡片 | on_gas_state | 500ms | - -## 界面⑥ 机器人底盘界面 - -### 3.4.1 功能概述 - -协议要求:只有在“行车/机械臂模式”切换为行车模式(当在手动消除或消毒模式时,行车/机械臂操作均无效),或进入此页面后,才可执行底盘前进、后退、左转向、右转向操作,可调整车速参数,并自动保存车速参数,下次上电开机会读取车速参数。通过屏幕左侧物理摇杆来控制,或者触摸控制底盘的行驶。 - -协议要求:机械臂展开或未回位状态下,控制底盘行驶会闪烁提示“机械臂未回位,请谨慎操作”。紧急状态可按下遥控屏上急停按钮,按下后切断机器人底盘动力,底盘、机械臂、洗消系统立即停止。通信状态不正常,会闪烁显示“通信异常”。警示字体都为红色。 - -原型布局:左列“前进/后退/左转向/右转向”4 按钮;中央洗消、机械臂、气体检测仪 3 卡片;右侧底盘状态卡+车速设置+返回。 - -### 3.4.2 界面布局(线框示意) - -```text -┌──────────────────────────────────────────────┐ -│通信●正常 │【机器人底盘】 告警:清水液位低! 时间 急停 │              │ -├──────────────────────────────────────────────┤ -│前进    │┌───洗消────┐ ┌───机械臂───┐ │电量SOC:85%     │ -│后退    ││A液位:100L │ │末端XYZ    │ │电压U:360V      │ -│左转向   ││泡沫液位:30L │ │姿态RX..   │ │车速V:3.45      │ -│右转向   ││         │ │         │ │手刹:有效         │ -│摇杆指示  │└─────────┘ └─────────┘ │故障:总电压低       │ -│      │┌───检测仪───┐             │(故障循环)        │ -│      ││点火S类2级   │             │车速设置:4.5      │ -│      ││浓度300ppb │             │-   +         │ -│      ││         │             │自动保存          │ -│      │└─────────┘             │返回            │ -├──────────────────────────────────────────────┤ -│底盘电量:85%   │底盘电压:360V 清水液位:100L 泡沫液位:30L 行车模式 │ -└──────────────────────────────────────────────┘ -``` - -说明:线框为结构示意(画布 1920×1080),控件精确坐标以 3.4.3 分区说明与 3.4.4 控件清单为准。 - -### 3.4.3 分区说明 - -| 区域 | 位置(x,y,w,h) | 内容 | 说明 | -|---|---|---|---| -| 顶条 | (0,0,1920,98) | 通信状态/标题/告警区/时间/软急停 | 告警区红字(液位低、通信异常等) | -| 告警横幅 | (0,114,1920,54) | 机械臂未回位提示/通信异常 | 红字 500ms 闪烁,默认隐藏 | -| 左控制列 | (36,188,180,756) | 前进/后退/左转向/右转向 | 大按钮 180×162;含左摇杆状态指示 | -| 中央卡片区 | (300,188,840,756) | 洗消/机械臂/气体检测仪 3 卡片 | 与⑤一致,只读 | -| 右参数区 | (1230,188,654,756) | 底盘状态卡+车速设置 | 故障循环显示;车速自动保存 | -| 底部状态条 | (0,986,1920,94) | 电量/电压/液位/模式徽标/返回 | 模式徽标显示行车/机械臂 | - -### 3.4.4 控件清单 - -| ID | 控件 | 文本/取值 | 位置(x,y,w,h) | 初始状态 | 交互与样式要点 | -|---|---|---|---|---|---| -| C1 | QPushButton | 前进 | (36,188,180,162) | 行车模式可用 | 按住连续行驶、松开停止;按下主色反馈 | -| C2 | QPushButton | 后退 | (36,368,180,162) | 行车模式可用 | 同上 | -| C3 | QPushButton | 左转向 | (36,546,180,162) | 行车模式可用 | 同上 | -| C4 | QPushButton | 右转向 | (36,724,180,162) | 行车模式可用 | 同上 | -| C5 | 摇杆指示 | 左摇杆方向 | (36,918,180,54) | 只读 | 显示物理摇杆方位(图形) | -| C6 | DataCard 底盘 | 电量/电压/车速/手刹/故障 | (1230,188,654,404) | 只读 | 故障多条 2s 轮换红闪 | -| C7 | ParamControl 车速 | km/h,当前存储值 | (1230,620,654,270) | 当前值 | 加减步进 0.5;改动 1s 防抖自动保存 | -| C8 | QLabel 模式徽标 | 行车模式/机械臂模式 | 底部状态条 | 行车模式 | 非行车模式时 C1~C4 禁用并提示 | -| C9 | QPushButton | 返回 | (1710,994,144,76) | 可用 | →⑤作业选择 | - -### 3.4.5 运行状态机 - -| 状态 | 可用操作 | 禁用/限制 | 提示与显示 | -|---|---|---|---| -| 行车模式 | 方向按钮/车速设置/返回 | 机械臂相关操作 | 徽标绿色“行车模式” | -| 机械臂模式 | 车速设置/返回 | 方向按钮 | 徽标灰色;提示切换模式 | -| 手动消除/消毒模式 | 返回 | 方向按钮+车速设置 | 提示“洗消模式下底盘不可操作” | -| 机械臂未回位行驶中 | 方向按钮等 | — | 横幅红闪提示 | -| 通信异常 | 返回 | 其余操作 | 顶条红闪“通信异常” | -| 急停触发 | 复位流程 | 全部操作 | 红色急停横幅 | - -### 3.4.6 交互逻辑 - -| 步骤 | 用户操作 | 系统行为与结果 | -|---|---|---| -| 1 | 触摸按住“前进”(或左摇杆前推) | 下发底盘行驶指令(方向+车速设置值),松开停止 | -| 2 | 依次使用方向按钮/摇杆 | 前进、后退、左转向、右转向对应移动 | -| 3 | 非行车模式时操作方向按钮 | 按钮禁用;提示“请切换至行车模式” | -| 4 | 机械臂未回位时行驶 | 告警横幅红闪“机械臂未回位,请谨慎操作” | -| 5 | 调整车速(+/-或输入) | 数值更新;1s 防抖后自动保存至存储区,提示“已保存” | -| 6 | 上电开机进入本页 | 自动读取存储区车速参数并显示 | -| 7 | 点击软急停或物理急停 | 切断底盘动力,底盘/机械臂/洗消立即停止;红色急停横幅,需人工复位 | -| 8 | 通信状态异常 | 顶条“通信异常”红闪;数据置灰保留最后有效值 | -| 9 | 底盘故障多条 | 故障区循环显示(2s/条) | -| 10 | 点击返回 | →⑤作业选择界面 | - -### 3.4.7 数据与信号绑定 - -| 字段 | 显示位置 | 数据来源(占位) | 刷新/显示规则 | -|---|---|---|---| -| 电量/电压/车速/手刹 | 底盘状态卡 | on_chassis_state | 500ms | -| 底盘故障列表 | 底盘状态卡 | faults[] | 2s/条轮换,红闪 | -| 车速存储值 | 车速设置 | stored_param('speed') | 上电读取;修改自动保存 | -| 机械臂回位状态 | 告警横幅触发 | on_arm_state.return_state | 未回位时红闪横幅 | -| 清水液位 | 底条/告警 | on_tank_level | 液位低红闪 | - -## 界面⑦ 机械臂界面 - -### 3.5.1 功能概述 - -协议要求:只有在“行车/机械臂模式”切换为机械臂模式(当在手动消除或消毒模式时,行车/机械臂操作均无效),或进入此页面后,才可执行机械臂的操作。机械臂的所有手动动作,通过屏幕左、右侧摇杆来控制,或者触摸控制。 - -协议要求:选择“系统回位/暂停”,图标点亮,开始执行机械臂系统自动回位,回位完成显示“机械臂系统完成回位”,图标自动熄灭;若无法回位到原点则显示“机械臂系统回位异常”,并有故障提示;若在回位过程中点击“系统回位/暂停”,暂停回位,图标熄灭。机械臂相关状态以及主要基本参数等会显示在中间区域,如有故障会闪烁显示。紧急状态可按下遥控屏上急停按钮。通信状态不正常,会闪烁显示“通信异常”。在手动消除或手动消毒洗消作业过程中机械臂末端作自动俯仰摆动。 - -原型布局:左列“左平移/右平移/上升/下降/前平移/后平移+系统回位/暂停”;中央 3 卡片;右侧机械臂参数卡(末端位置/姿态/速度、Joint1~6 关节角)+末端按钮列(末端仰/俯/正偏航/负偏航/左横滚/右横滚)+返回。 - -### 3.5.2 界面布局(线框示意) - -```text -┌──────────────────────────────────────────────┐ -│通信●正常 │【机械臂】         时间  急停    │              │ -├──────────────────────────────────────────────┤ -│左平移   │┌───底盘────┐ ┌───机械臂───┐ │末端仰           │ -│右平移   ││电量:85%   │ │末端XYZ    │ │末端俯           │ -│上升    ││电压:360V  │ │姿态RX..   │ │末端正偏航         │ -│下降    ││故障:无     │ │         │ │末端负偏航         │ -│前平移   │└─────────┘ └─────────┘ │末端左横滚         │ -│后平移   │J1:30度 J2:20度 J3:0度     │末端右横滚         │ -│      │J4:90度 J5:45度 J6:0度     │              │ -│      │末端位置XYZ 姿态RX..          │              │ -│      │┌───检测仪───┐             │              │ -│      ││点火S类2级   │             │              │ -│      ││浓度300ppb │             │              │ -│      ││         │             │              │ -│      │└─────────┘             │              │ -│系统回位  │                        │              │ -│/暂停   │                        │返回            │ -├──────────────────────────────────────────────┤ -│底盘电量:85%   │底盘电压:360V 清水液位:100L 泡沫液位:30L 机械臂模式│ -└──────────────────────────────────────────────┘ -``` - -说明:线框为结构示意(画布 1920×1080),控件精确坐标以 3.5.3 分区说明与 3.5.4 控件清单为准。 - -### 3.5.3 分区说明 - -| 区域 | 位置(x,y,w,h) | 内容 | 说明 | -|---|---|---|---| -| 顶条 | (0,0,1920,98) | 通信状态/标题/时间/软急停 | 见 2.6 | -| 左控制列 | (36,188,180,756) | 6 个运动按钮+系统回位/暂停 | 前/后/左/右平移、上升/下降 | -| 中央卡片区 | (300,188,840,756) | 底盘/洗消/气体检测仪 3 卡片 | 与⑤一致,只读 | -| 右参数区 | (1230,188,654,404) | 机械臂参数卡 | 末端位置/姿态/速度+Joint1~6 | -| 右按钮列 | (1230,620,654,324) | 末端 6 个姿态按钮 | 仰/俯/正偏航/负偏航/左横滚/右横滚 | -| 底部状态条 | (0,986,1920,94) | 电量/电压/液位/模式/返回 | 模式徽标显示 | - -### 3.5.4 控件清单 - -| ID | 控件 | 文本/取值 | 位置(x,y,w,h) | 初始状态 | 交互与样式要点 | -|---|---|---|---|---|---| -| A1 | QPushButton ×6 | 左平移/右平移/上升/下降/前平移/后平移 | (36,188,180,98),间距 18 | 机械臂模式可用 | 按住连续运动、松开停止 | -| A2 | QPushButton | 系统回位/暂停 | (36,870,180,98) | 可用 | 双态:图标点亮=回位中;熄灭=待机/暂停 | -| A3 | DataCard 机械臂 | 末端位置/姿态/速度+Joint1~6 | (1230,188,654,404) | 只读 | 500ms 刷新;故障红闪 | -| A4 | QPushButton ×6 | 末端仰/俯/正偏航/负偏航/左横滚/右横滚 | (1230,620,306,86)等 | 机械臂模式可用 | 按住连续运动、松开停止 | -| A5 | QLabel 徽标 | 行车模式/机械臂模式 | 底部状态条 | 机械臂模式 | 非机械臂模式时 A1/A4 禁用 | -| A6 | QPushButton | 返回 | (1710,994,144,76) | 可用 | →⑤作业选择 | - -### 3.5.5 运行状态机 - -| 状态 | 可用操作 | 禁用/限制 | 提示与显示 | -|---|---|---|---| -| 机械臂模式 | 运动按钮/末端按钮/回位 | — | 徽标绿色“机械臂模式” | -| 行车模式 | 系统回位/返回 | 运动按钮、末端按钮 | 提示“请切换至机械臂模式” | -| 回位中 | 暂停(再次点击) | 运动按钮/末端按钮 | 回位按钮图标点亮 | -| 回位完成 | 全部 | — | 绿字提示 3s | -| 回位异常 | 全部 | — | 红字+故障弹窗 | -| 洗消作业中 | 返回/急停 | 运动按钮/末端按钮 | 提示“洗消作业中,末端自动摆动” | - -### 3.5.6 交互逻辑 - -| 步骤 | 用户操作 | 系统行为与结果 | -|---|---|---| -| 1 | 触摸按住左列运动按钮(或左摇杆) | 机械臂对应方向连续运动,松开停止 | -| 2 | 触摸末端按钮(或右摇杆) | 末端姿态连续调节 | -| 3 | 点击“系统回位/暂停” | 图标点亮,开始执行系统自动回位 | -| 4 | 回位完成 | 显示“机械臂系统完成回位”,图标自动熄灭 | -| 5 | 无法回位到原点 | 显示“机械臂系统回位异常”(红字)+故障提示弹窗 | -| 6 | 回位过程中再次点击“系统回位/暂停” | 暂停回位,图标熄灭 | -| 7 | 手动消除/消毒洗消作业中 | 机械臂末端自动俯仰摆动;A1/A4 禁用并提示 | -| 8 | 通信异常/急停 | 按全局规则(顶条红闪/急停横幅) | - -### 3.5.7 数据与信号绑定 - -| 字段 | 显示位置 | 数据来源(占位) | 刷新/显示规则 | -|---|---|---|---| -| 关节角 1~6 | 机械臂参数卡 | on_arm_state.js[] | 500ms | -| 末端位置/姿态/速度 | 机械臂参数卡 | on_arm_state | 500ms | -| 回位状态 | 回位按钮+横幅 | return_state | 待机/回位中/完成/异常 | -| 洗消作业标志 | 提示与禁用 | cmd_wash 状态 | 作业中禁用手动 | - -## 界面⑧ 气体检测仪界面 - -### 3.6.1 功能概述 - -协议要求:此页面启动气体检测仪工作,检测仪当前状态、检测结果以及底盘电量电压和液位基本参数等会显示在中间区域,如有故障会闪烁显示。通过触摸控制,或者物理旋钮结合界面中图标光标来控制。 - -原型布局:中央 4 张卡片(底盘、洗消、机械臂、气体检测仪),气体检测仪卡含主机状态、有毒物种类、有毒物等级、有毒物浓度(ppb);右侧“启动/停机/返回”按钮。 - -### 3.6.2 界面布局(线框示意) - -```text -┌──────────────────────────────────────────────┐ -│通信●正常 │【气体检测仪】      时间  急停     │              │ -├──────────────────────────────────────────────┤ -│      │┌───底盘────┐ ┌───洗消────┐ │启动            │ -│      ││电量:85%   │ │A液位:100L │ │停机            │ -│      ││电压:360V  │ │泡沫液位:30L │ │返回            │ -│      ││故障:无     │ │         │ │              │ -│      │└─────────┘ └─────────┘ │              │ -│      │┌───检测仪───┐ ┌───机械臂───┐ │              │ -│      ││点火S类2级   │ │末端XYZ    │ │              │ -│      ││浓度300ppb │ │姿态RX..   │ │              │ -│      ││         │ │         │ │              │ -│      │└─────────┘ └─────────┘ │              │ -├──────────────────────────────────────────────┤ -│底盘电量:85%   │底盘电压:360V 清水液位:100L 泡沫液位:30L 检测模式 │ -└──────────────────────────────────────────────┘ -``` - -说明:线框为结构示意(画布 1920×1080),控件精确坐标以 3.6.3 分区说明与 3.6.4 控件清单为准。 - -### 3.6.3 分区说明 - -| 区域 | 位置(x,y,w,h) | 内容 | 说明 | -|---|---|---|---| -| 顶条 | (0,0,1920,98) | 通信状态/标题/时间/软急停 | 见 2.6 | -| 中央卡片区 | (300,162,1170,810) | 底盘/洗消/机械臂/气体检测仪 4 卡 | 气体检测仪卡加主色描边突出 | -| 浓度大字 | 气体检测仪卡内 | 有毒物浓度(ppb) | 56px 加粗大数字 | -| 右侧按钮列 | (1530,162,354,810) | 启动/停机/返回 | 启动主色、停机普通、返回底部 | -| 底部状态条 | (0,986,1920,94) | 电量/电压/液位/模式/返回 | 见 2.6 | - -### 3.6.4 控件清单 - -| ID | 控件 | 文本/取值 | 位置(x,y,w,h) | 初始状态 | 交互与样式要点 | -|---|---|---|---|---|---| -| G1 | DataCard ×4 | 底盘/洗消/机械臂/气体检测仪 | (300,162,570,378)等 | 只读 | 500ms 刷新;故障红闪 | -| G2 | QLabel 浓度 | 有毒物浓度 | 气体检测仪卡内 | — | 56px 加粗;超阈值红闪 | -| G3 | QPushButton | 启动 | (1530,162,354,98) | 待机可用 | 主色;检测中禁用 | -| G4 | QPushButton | 停机 | (1530,276,354,98) | 检测中可用 | 普通色;待机禁用 | -| G5 | QPushButton | 返回 | (1710,994,144,76) | 可用 | →⑤作业选择;检测中返回弹提示 | - -### 3.6.5 运行状态机 - -| 状态 | 可用操作 | 禁用/限制 | 提示与显示 | -|---|---|---|---| -| 待机 | 启动/返回 | 停机 | 状态“待机” | -| 检测中 | 停机/返回 | 启动 | 状态“检测中”绿点 | -| 故障/超阈值 | 停机/返回 | 启动 | 字段红闪 | - -### 3.6.6 交互逻辑 - -| 步骤 | 用户操作 | 系统行为与结果 | -|---|---|---| -| 1 | 点击“启动” | 下发启动指令;状态“检测中”;启动禁用、停机可用 | -| 2 | 检测中 | 主机状态、有毒物种类、等级、浓度实时刷新(500ms) | -| 3 | 点击“停机” | 下发停机指令;状态“待机”;停机禁用、启动可用 | -| 4 | 检测中点击“返回” | 弹窗提示“检测仍在进行,是否退出?”;确认退出、取消留在本页【设计建议】 | -| 5 | 浓度超阈值/故障 | 对应字段红闪,顶条告警 | -| 6 | 通信异常/急停 | 按全局规则 | - -### 3.6.7 数据与信号绑定 - -| 字段 | 显示位置 | 数据来源(占位) | 刷新/显示规则 | -|---|---|---|---| -| 主机状态 | 气体检测仪卡 | on_gas_state.hostState | 待机/检测中/故障 | -| 有毒物种类/等级 | 气体检测仪卡 | on_gas_state | 500ms | -| 有毒物浓度 | 浓度大字 | on_gas_state.conc | 500ms;超阈值红闪 | -| 底盘电量/电压/液位 | 底盘卡/底条 | on_chassis_state/on_tank_level | 500ms | - -## 界面⑨ 手动消除界面 - -### 3.7.1 功能概述 - -协议要求:进入此页面后,机器人底盘和机械臂的所有手动操作均无效,在洗消过程中机械手自动摆动。紧急状态可按下遥控屏上急停按钮。通过触摸控制,或者物理旋钮结合界面中图标光标来控制。此页面点击“启动”手动消除后,只有主动点击“停止”后,点击“返回”才能退出此页面返回到作业选择页面,否则“返回”操作无效。 - -协议要求:通过光标选择旋钮和参数设置旋钮,可以手动调整柱塞泵流量参数(出厂值为 20),调整完参数可选择保存,每次上电开机会自动读取存储区参数值;当点击“恢复出厂值”时,出厂值会覆盖存储区参数值。运行时流量、压力等实时显现在中间画面中。柱塞泵、空压机、叶片泵是否上电,电动球阀 D1/D2 是否开启,通过相应指示灯表示,指示灯绿色表示运行或开启,灰色表示未运行或关闭;液位是否正常,有无系统故障,指示灯红色闪烁表示液位低或系统有故障,灰色表示正常;通信状态不正常,会闪烁显示“通信异常”。空压机故障代码、柱塞泵故障代码轮流循环显示。 - -原型布局:左侧底盘/机械臂/气体检测仪 3 卡片;中央洗消参数卡(洗消模式、液位、A/B 药剂流量、气体流量、管路/空压机压力、发泡倍数、故障代码);右侧启动/停止、柱塞泵流量设置(保存)、返回;底部指示灯条(启停、柱塞泵、空压机、叶片泵、液位低、D1、D2、系统故障)+恢复出厂值。 - -### 3.7.2 界面布局(线框示意) - -```text -┌──────────────────────────────────────────────┐ -│通信●正常       │【手动消除】            │时间  急停        │ -├──────────────────────────────────────────────┤ -│┌────底盘────┐│┌────洗消(手动消除)────┐│启动            │ -││电量:85%    │││洗消模式:手动消除       ││停止            │ -││电压:360V   │││A组分液位:100L      ││柱塞泵流量         │ -││故障:无      │││泡沫箱液位:30L       ││20L/min       │ -│└──────────┘││A药剂流量:20L/min   ││-   +         │ -│┌───机械臂────┐││B药剂流量:0.5L/min  ││保存            │ -││末端XYZ     │││气体流量:100L/min   ││返回            │ -││姿态RX..    │││管路压力:0.3MPa     ││              │ -││          │││空压机压力:0.35MPa   ││              │ -│└──────────┘││发泡倍数:8          ││              │ -│┌───检测仪────┐││空压机故障代码:        ││              │ -││点火S类2级    │││柱塞泵故障代码:        ││              │ -││浓度300ppb  │││                ││              │ -││          │││                ││              │ -│└──────────┘│└────────────────┘│              │ -├──────────────────────────────────────────────┤ -│恢复出厂值      │启停●柱塞泵●空压机●叶片泵●液位低●D1●D2●系统故障●    │ -└──────────────────────────────────────────────┘ -``` - -说明:线框为结构示意(画布 1920×1080),控件精确坐标以 3.7.3 分区说明与 3.7.4 控件清单为准。 - -### 3.7.3 分区说明 - -| 区域 | 位置(x,y,w,h) | 内容 | 说明 | -|---|---|---|---| -| 顶条 | (0,0,1920,98) | 通信状态/标题/时间/软急停 | 见 2.6 | -| 左状态卡 | (36,162,224,810) | 底盘/机械臂/气体检测仪 3 卡片 | 只读,与⑤一致 | -| 中央洗消卡 | (300,162,1170,810) | 洗消模式/液位/流量/压力/发泡倍数/故障代码 | 实时刷新;故障代码轮流显示 | -| 右操作列 | (1530,162,354,810) | 启动/停止、柱塞泵流量设置、返回 | 运行中返回无效 | -| 底部指示灯条 | (0,986,1920,94) | 8 个指示灯+恢复出厂值 | 绿=运行/开启;灰=未运行/关闭;红闪=液位低/系统故障 | - -### 3.7.4 控件清单 - -| ID | 控件 | 文本/取值 | 位置(x,y,w,h) | 初始状态 | 交互与样式要点 | -|---|---|---|---|---|---| -| W1 | QPushButton | 启动 | (1530,162,354,98) | 待机可用 | 主色;下发 cmd_wash_start | -| W2 | QPushButton | 停止 | (1530,276,354,98) | 运行中可用 | 危险色;下发 cmd_wash_stop | -| W3 | ParamControl | 柱塞泵流量 L/min | (1530,404,354,296) | 存储值 | 加减步进 0.5;保存按钮;出厂值 20 | -| W4 | QPushButton | 恢复出厂值 | (36,1004,270,64) | 可用 | 确认弹窗后覆盖存储区 | -| W5 | LedIndicator ×8 | 启停/柱塞泵/空压机/叶片泵/液位低/D1/D2/系统故障 | 底部条 | 灰 | 语义见分区说明 | -| W6 | QLabel 故障代码 | 空压机/柱塞泵故障代码 | 中央洗消卡 | 空 | 多条 2s 轮流循环显示 | -| W7 | QPushButton | 返回 | (1710,994,144,76) | 待机可用 | 运行中点击提示“请先停止”;停止后可用 | - -### 3.7.5 运行状态机 - -| 状态 | 可用操作 | 禁用/限制 | 提示与显示 | -|---|---|---|---| -| 待机(未运行) | 启动、参数设置、保存、恢复出厂值、返回 | 停止 | 启动可用;返回可用 | -| 运行中 | 停止、参数设置、保存 | 启动、返回 | 返回无效并提示;机械手自动摆动 | -| 停止后 | 启动、返回、参数设置 | 停止 | 返回恢复可用 | - -### 3.7.6 交互逻辑 - -| 步骤 | 用户操作 | 系统行为与结果 | -|---|---|---| -| 1 | 点击“启动” | 进入运行状态:启动禁用、停止可用、返回无效;机械手自动摆动;实时数据刷新 | -| 2 | 运行中点击“返回” | 无效,提示“请先停止” | -| 3 | 点击“停止” | 停止洗消:停止禁用、启动可用、返回恢复可用 | -| 4 | 调整柱塞泵流量(旋钮/+-) | 数值更新;点击“保存”→写入存储区,提示“已保存” | -| 5 | 点击“恢复出厂值” | 确认弹窗→出厂值 20 覆盖存储区参数并显示 | -| 6 | 上电开机 | 自动读取存储区柱塞泵流量参数 | -| 7 | 故障代码多条 | 空压机/柱塞泵故障代码轮流循环显示(2s/条) | -| 8 | 指示灯刷新 | 绿=运行/开启,灰=未运行/关闭,红闪=液位低/系统故障,灰=正常 | -| 9 | 通信异常 | 顶条红闪“通信异常” | -| 10 | 急停 | 按全局规则,全系统停止 | - -### 3.7.7 数据与信号绑定 - -| 字段 | 显示位置 | 数据来源(占位) | 刷新/显示规则 | -|---|---|---|---| -| 洗消模式/液位/流量/压力/发泡倍数 | 中央洗消卡 | on_wash_state/on_tank_level | 500ms | -| 泵上电/球阀状态 | 底部指示灯 | on_pump_state/on_ball_valve_state | 绿/灰/红闪 | -| 故障代码 | 中央洗消卡 | faults[] | 2s 轮流循环显示 | -| 柱塞泵流量存储值 | W3 | stored_param('pump_flow') | 出厂 20;上电读取;保存写回 | - -## 界面⑩ 手动消毒界面 - -### 3.8.1 功能概述 - -协议要求:进入此页面后,机器人底盘和机械臂的所有手动操作均无效,在洗消过程中机械手自动摆动。紧急状态可按下遥控屏上急停按钮。通过触摸控制,或者物理旋钮结合界面中图标光标来控制。此页面点击“启动”后,只有主动点击“停止”后,点击“返回”才能退出此页面返回到作业选择页面,否则“返回”操作无效。 - -协议要求:通过光标选择旋钮和参数设置旋钮,可以手动调整发泡倍数参数(出厂值 6)、泡沫比例参数(出厂值 3%)及空压机流量参数(出厂值 100),调整完参数可选择保存,每次上电开机会自动读取存储区参数值;当点击“恢复出厂值”时,出厂值会覆盖存储区参数值。运行时流量、压力、发泡倍数等实时显现在中间画面中。指示灯语义、故障代码轮流显示与界面⑨一致。 - -原型布局:与⑨一致,右侧参数区为发泡倍数(6 倍)、泡沫比例(3%)、空压机流量(100L/min)三个参数卡,各带保存;中央洗消卡含发泡倍数显示。 - -### 3.8.2 界面布局(线框示意) - -```text -┌──────────────────────────────────────────────┐ -│通信●正常       │【手动消毒】            │时间  急停        │ -├──────────────────────────────────────────────┤ -│┌────底盘────┐│┌────洗消(手动消毒)────┐│启动            │ -││电量:85%    │││洗消模式:手动消毒       ││停止            │ -││电压:360V   │││A组分液位:100L      ││发泡倍数          │ -││故障:无      │││泡沫箱液位:30L       ││6倍            │ -│└──────────┘││A药剂流量:20L/min   ││-   +         │ -│┌───机械臂────┐││B药剂流量:0.5L/min  ││保存            │ -││末端XYZ     │││气体流量:100L/min   ││泡沫比例          │ -││姿态RX..    │││管路压力:0.3MPa     ││3%            │ -││          │││空压机压力:0.35MPa   ││-   +         │ -│└──────────┘││发泡倍数:6          ││保存            │ -│┌───检测仪────┐││空压机故障代码:        ││空压机流量         │ -││点火S类2级    │││柱塞泵故障代码:        ││100L/min      │ -││浓度300ppb  │││                ││-   +         │ -││          │││                ││保存            │ -│└──────────┘│└────────────────┘│返回            │ -├──────────────────────────────────────────────┤ -│恢复出厂值      │启停●柱塞泵●空压机●叶片泵●液位低●D1●D2●系统故障●    │ -└──────────────────────────────────────────────┘ -``` - -说明:线框为结构示意(画布 1920×1080),控件精确坐标以 3.8.3 分区说明与 3.8.4 控件清单为准。 - -### 3.8.3 分区说明 - -| 区域 | 位置(x,y,w,h) | 内容 | 说明 | -|---|---|---|---| -| 顶条 | (0,0,1920,98) | 通信状态/标题/时间/软急停 | 见 2.6 | -| 左状态卡 | (36,162,224,810) | 底盘/机械臂/气体检测仪 3 卡片 | 只读 | -| 中央洗消卡 | (300,162,1170,810) | 洗消模式/液位/流量/压力/发泡倍数/故障代码 | 实时刷新 | -| 右操作列 | (1530,162,354,810) | 启动/停止+3 个参数卡+返回 | 运行中返回无效 | -| 底部指示灯条 | (0,986,1920,94) | 8 个指示灯+恢复出厂值 | 同⑨ | - -### 3.8.4 控件清单 - -| ID | 控件 | 文本/取值 | 位置(x,y,w,h) | 初始状态 | 交互与样式要点 | -|---|---|---|---|---|---| -| S1 | QPushButton | 启动 | (1530,162,354,98) | 待机可用 | 主色 | -| S2 | QPushButton | 停止 | (1530,276,354,98) | 运行中可用 | 危险色 | -| S3 | ParamControl | 发泡倍数(倍) | (1530,404,354,178) | 存储值 | 出厂 6;加减步进 0.5;保存 | -| S4 | ParamControl | 泡沫比例(%) | (1530,600,354,178) | 存储值 | 出厂 3;加减步进 0.5;保存 | -| S5 | ParamControl | 空压机流量(L/min) | (1530,794,354,178) | 存储值 | 出厂 100;加减步进 1;保存 | -| S6 | QPushButton | 恢复出厂值 | (36,1004,270,64) | 可用 | 确认后三个参数全部恢复出厂值 | -| S7 | LedIndicator ×8 | 启停/柱塞泵/空压机/叶片泵/液位低/D1/D2/系统故障 | 底部条 | 灰 | 同⑨ | -| S8 | QPushButton | 返回 | (1710,994,144,76) | 待机可用 | 运行中提示“请先停止” | - -### 3.8.5 运行状态机 - -| 状态 | 可用操作 | 禁用/限制 | 提示与显示 | -|---|---|---|---| -| 待机(未运行) | 启动、参数设置、保存、恢复出厂值、返回 | 停止 | 启动可用;返回可用 | -| 运行中 | 停止、参数设置、保存 | 启动、返回 | 返回无效并提示 | -| 停止后 | 启动、返回、参数设置 | 停止 | 返回恢复可用 | - -### 3.8.6 交互逻辑 - -| 步骤 | 用户操作 | 系统行为与结果 | -|---|---|---| -| 1 | 点击“启动” | 进入运行状态:启动禁用、停止可用、返回无效;机械手自动摆动 | -| 2 | 运行中点击“返回” | 无效,提示“请先停止” | -| 3 | 点击“停止” | 停止洗消:返回恢复可用 | -| 4 | 分别调整发泡倍数/泡沫比例/空压机流量 | 数值更新;各自“保存”→写入存储区 | -| 5 | 点击“恢复出厂值” | 确认弹窗→发泡倍数 6、泡沫比例 3%、空压机流量 100 覆盖存储区 | -| 6 | 上电开机 | 自动读取三个参数存储值 | -| 7 | 故障代码/指示灯/通信异常/急停 | 同⑨规则 | - -### 3.8.7 数据与信号绑定 - -| 字段 | 显示位置 | 数据来源(占位) | 刷新/显示规则 | -|---|---|---|---| -| 洗消实时数据 | 中央洗消卡 | on_wash_state/on_tank_level | 500ms | -| 泵/球阀/液位/故障指示 | 底部指示灯 | on_pump_state/on_ball_valve_state | 绿/灰/红闪 | -| 发泡倍数存储值 | S3 | stored_param('foam_ratio') | 出厂 6 | -| 泡沫比例存储值 | S4 | stored_param('foam_percent') | 出厂 3 | -| 空压机流量存储值 | S5 | stored_param('air_flow') | 出厂 100 | - -## 界面⑪ 调试维护界面 - -### 3.9.1 功能概述 - -协议要求:在调试维护页面,可查看当前各个部件的信号和状态,可以单独控制电动球阀 D1/D2、柱塞泵、空压机、叶片泵等的动作和运行,调整转速参数,显示当前流量和压力。通过触摸控制,或者物理按键旋钮结合界面中图标光标来控制。紧急状态可按下遥控屏上急停按钮。操作时闪烁提示红色文字:“警告:该模式下无保护功能,操作请谨慎!”。 - -协议要求(球阀图标逻辑):D1 上侧图标用于表示控制电动球阀 D1 开启或关闭,初始为灰色,选中后显示绿色,表示控制 D1 开启;下左图标用于表示 D1 开启是否到位,初始为灰色,显示绿色表示 D1 开启到位;下右图标用于表示 D1 关闭是否到位,初始为红色,表示 D1 处在关闭到位状态;当控制 D1 开启时关闭到位图标正常情况应由红色变为灰色,若收到总线上关于 D1 开启故障信息,则发出“D1开启故障”闪烁提示。开启与关闭图标取消选中后由绿色变为灰色,此时控制 D1 关闭,开启到位图标正常情况应由绿色变为灰色,若收到总线上关于 D1 关闭故障信息,则发出“D1关闭故障”闪烁提示。D2 图标含义与 D1 一致。 - -协议要求:空压机/柱塞泵/叶片泵右侧图标选中后显示绿色,表示控制相应接触器上电。空压机/柱塞泵/叶片泵转速手动设置调整,作为调试临时值,不保存。液位、流量、压力值在调试时实时显示在界面中。 - -原型布局:左侧 D1/D2 区;中央底盘/机械臂/气体检测仪卡片+洗消参数卡;右侧空压机/柱塞泵/叶片泵转速与启停;底部警告横幅+指示灯+返回。 - -### 3.9.2 界面布局(线框示意) - -```text -┌──────────────────────────────────────────────┐ -│通信●正常   │【洗消调试】     时间  急停       │            │ -│        │警告:该模式下无保护功能,操作请谨慎!(红闪) │            │ -├──────────────────────────────────────────────┤ -│D1上:开/关 │┌───────洗消(手动消毒)───────┐│空压机300rpm   │ -│D1下左:到位 ││洗消模式:手动消毒             ││-   +       │ -│D1下右:到位 ││A组分液位:100L            ││启动  停止      │ -│D2上:开/关 ││A药剂流量:20L/min         ││            │ -│D2下左:到位 ││管路压力:0.3MPa           ││柱塞泵200rpm   │ -│D2下右:到位 ││发泡倍数:8                ││-   +       │ -│        ││空压机故障代码:              ││启动  停止      │ -│        ││柱塞泵故障代码:              ││            │ -│        ││                      ││叶片泵200rpm   │ -│        │└──────────────────────┘│返回          │ -├──────────────────────────────────────────────┤ -│柱塞泵●       │空压机● 叶片泵● 液位低● (绿=上电,红闪=液位低)      │ -└──────────────────────────────────────────────┘ -``` - -说明:线框为结构示意(画布 1920×1080),控件精确坐标以 3.9.3 分区说明与 3.9.4 控件清单为准。 - -### 3.9.3 分区说明 - -| 区域 | 位置(x,y,w,h) | 内容 | 说明 | -|---|---|---|---| -| 顶条 | (0,0,1920,98) | 通信状态/标题/时间/软急停 | 见 2.6 | -| 警告横幅 | (0,114,1920,54) | 红色警告文字 | 500ms 闪烁常显 | -| 左球阀控制区 | (36,188,224,756) | D1/D2 各 3 个图标 | 上=控制开/关、下左=开启到位、下右=关闭到位 | -| 中央卡片区 | (300,188,840,756) | 底盘/机械臂/气体检测仪 mini 卡+洗消参数卡 | 液位/流量/压力实时显示 | -| 右泵控制区 | (1230,188,654,756) | 空压机/柱塞泵/叶片泵转速+启停 | 转速为临时值不保存;上电图标选中=接触器上电 | -| 底部指示条 | (0,986,1920,94) | 柱塞泵/空压机/叶片泵/液位低指示灯+返回 | 见 2.6 | - -### 3.9.4 控件清单 - -| ID | 控件 | 文本/取值 | 位置(x,y,w,h) | 初始状态 | 交互与样式要点 | -|---|---|---|---|---|---| -| T1 | 图标按钮 ×2 | D1/D2 上侧(控制开/关) | 左球阀区 | 灰 | 选中绿=控制开启;再点取消=控制关闭 | -| T2 | 图标 ×2 | D1/D2 下左(开启到位) | 左球阀区 | 灰 | 开启到位变绿 | -| T3 | 图标 ×2 | D1/D2 下右(关闭到位) | 左球阀区 | 红 | 关闭到位初始红;开启过程中红→灰 | -| T4 | 图标按钮 ×3 | 空压机/柱塞泵/叶片泵上电 | 右泵控制区 | 灰 | 选中绿=接触器上电 | -| T5 | ParamControl ×3 | 转速(rpm) | 右泵控制区 | 默认值 | 步进 10;临时值不保存 | -| T6 | QLabel 警告 | 警告:该模式下无保护功能,操作请谨慎! | 警告横幅 | 常显 | 红字 500ms 闪烁 | -| T7 | QPushButton | 返回 | (1710,994,144,76) | 可用 | →⑤作业选择 | - -### 3.9.5 运行状态机 - -| 状态 | 可用操作 | 禁用/限制 | 提示与显示 | -|---|---|---|---| -| 调试中(正常) | 全部控制按钮 | — | 警告横幅红闪 | -| D1/D2 开启故障 | 全部 | 故障球阀操作 | “D1开启故障”红闪提示 | -| D1/D2 关闭故障 | 全部 | 故障球阀操作 | “D1关闭故障”红闪提示 | -| 急停触发 | 复位 | 全部 | 急停横幅 | - -### 3.9.6 交互逻辑 - -| 步骤 | 用户操作 | 系统行为与结果 | -|---|---|---| -| 1 | 点击 D1 上侧图标(选中) | 图标变绿→发送 D1 开启指令;开启到位图标应由灰变绿、关闭到位图标应由红变灰;若收到 D1 开启故障信息→“D1开启故障”红色闪烁提示 | -| 2 | 再次点击 D1 上侧图标(取消选中) | 图标变灰→发送 D1 关闭指令;开启到位图标应由绿变灰、关闭到位图标变红;若收到 D1 关闭故障信息→“D1关闭故障”红色闪烁提示 | -| 3 | D2 图标操作 | 与 D1 完全一致 | -| 4 | 点击泵上电图标 | 选中绿=相应接触器上电;取消=断电 | -| 5 | 调整泵转速(+/-) | 作为调试临时值实时下发,不保存;重启恢复默认 | -| 6 | 液位/流量/压力显示 | 调试期间实时刷新 | -| 7 | 任意操作时 | 警告横幅红色闪烁常显 | -| 8 | 急停 | 按全局规则 | - -### 3.9.7 数据与信号绑定 - -| 字段 | 显示位置 | 数据来源(占位) | 刷新/显示规则 | -|---|---|---|---| -| 球阀状态与到位 | 左球阀区 | on_ball_valve_state | 开/关控制、到位反馈、故障红闪 | -| 泵上电状态 | 右泵控制区 | on_pump_state | 选中绿=上电 | -| 转速临时值 | 右泵控制区 | set_speed_rpm | 不保存 | -| 液位/流量/压力 | 中央卡片 | on_wash_state/on_tank_level | 实时刷新 | - -## 界面⑫ 故障查询界面 - -### 3.10.1 功能概述 - -协议要求:在故障查询页面,可查看历史故障汇总,也可单独查询各个分系统故障。 - -原型布局:顶部标题“历史故障”(筛选后变为“XX历史故障”);表格列:序号、故障时间、故障名称,每页 6 条;右上角“上一页/下一页”;右侧分类按钮:机器人底盘故障、机械臂故障、洗消系统故障、气体检测仪故障;右下角“返回”。 - -### 3.10.2 界面布局(线框示意) - -```text -┌──────────────────────────────────────────────┐ -│历史故障(共18条)│上一页  下一页                           │ -├──────────────────────────────────────────────┤ -│ 序号  故障时间     故障名称               │机器人底盘故障     │ -│ 1  2026-05-16 10:08 底盘电量低       │机械臂故障       │ -│ 2  2026-05-16 09:58 底盘电机温度高     │洗消系统故障      │ -│ 3  2026-05-15 09:08 机械臂通信故障     │气体检测仪故障     │ -│ 4  2026-05-14 09:58 机械臂自检故障     │            │ -│ 5  2026-05-13 09:08 清水液位低       │            │ -│ 6  2026-05-13 08:18 药剂液位低       │            │ -├──────────────────────────────────────────────┤ -│页码:1/3    │返回                                 │ -└──────────────────────────────────────────────┘ -``` - -说明:线框为结构示意(画布 1920×1080),控件精确坐标以 3.10.3 分区说明与 3.10.4 控件清单为准。 - -### 3.10.3 分区说明 - -| 区域 | 位置(x,y,w,h) | 内容 | 说明 | -|---|---|---|---| -| 顶条 | (0,0,1920,98) | 标题(历史故障/XX历史故障)+汇总数 | 顶部左侧显示总条数【设计建议】 | -| 分页按钮 | 右上角 | 上一页/下一页 | 边界禁用 | -| 表格区 | (36,162,1350,810) | 序号/故障时间/故障名称 | 每页 6 行,行高 80px | -| 分类按钮列 | (1440,162,444,540) | 4 个分系统分类按钮 | 单选筛选;再点取消=全部【设计建议】 | -| 底部 | (36,986,1848,94) | 页码+返回 | 返回→来源页面 | - -### 3.10.4 控件清单 - -| ID | 控件 | 文本/取值 | 位置(x,y,w,h) | 初始状态 | 交互与样式要点 | -|---|---|---|---|---|---| -| F1 | QLabel 标题/汇总 | 历史故障(共 N 条) | (36,28,600,54) | 全部 | 筛选后标题变“XX历史故障” | -| F2 | QPushButton | 上一页 | (1560,28,164,64) | 首页禁用 | 翻页 | -| F3 | QPushButton | 下一页 | (1740,28,164,64) | 末页禁用 | 翻页 | -| F4 | QTableWidget | 序号/故障时间/故障名称 | (36,162,1350,810) | 6 行 | 行高 80px;斑马纹;点击行弹详情 | -| F5 | QPushButton ×4 | 机器人底盘故障/机械臂故障/洗消系统故障/气体检测仪故障 | (1440,162,444,98),间距 18 | 全部选中态 | 选中主色描边 | -| F6 | QLabel 页码 | 1/3 | (36,1004,300,54) | — | 当前页/总页数 | -| F7 | QPushButton | 返回 | (1710,994,144,76) | 可用 | →来源页面(④或⑤) | - -### 3.10.5 交互逻辑 - -| 步骤 | 用户操作 | 系统行为与结果 | -|---|---|---| -| 1 | 默认进入 | 显示全部历史故障(汇总计数);标题“历史故障” | -| 2 | 点击分类按钮“气体检测仪故障” | 表格筛选为气体检测仪故障记录;标题变“气体检测仪历史故障”;再点取消筛选【设计建议】 | -| 3 | 点击上一页/下一页 | 按 6 条/页翻页;首页上一页禁用、末页下一页禁用 | -| 4 | 点击某条记录 | 弹窗显示详情(故障时间、分系统、故障代码、故障描述)【设计建议】 | -| 5 | 空数据 | 表格区居中灰字“暂无故障记录” | -| 6 | 点击返回 | 返回来源页面(从④自检进入→回自检;从⑤作业选择进入→回⑤)【设计建议】 | - -### 3.10.6 数据与信号绑定 - -| 字段 | 显示位置 | 数据来源(占位) | 刷新/显示规则 | -|---|---|---|---| -| 全部/分系统筛选 | 表格 | 本地故障库 + 分类过滤 | 单选筛选 | -| 分页 | 页码/按钮 | 每页 6 条 | 首页/末页边界禁用 | -| 故障记录写入 | 表格数据源 | 通信层故障信号写入本地存储 | 含时间、系统、代码、描述 | -| 故障汇总计数 | 顶条 | 按系统统计 | 进入页面时刷新 | - -# 4 公共组件设计 - -## 4.1 TitleBar(顶条组件) - -**表4-1 TitleBar** - -| 项 | 设计 | -|---|---| -| 组成 | 通信状态标签、页面标题、时间、软急停按钮(可选显示) | -| 尺寸 | 全宽 1920×98,位于 y=0 | -| 接口 | setTitle(text)、setCommState(ok)、setEstopVisible(bool)、signal: estopClicked | -| 样式 | 背景 #242E3A,下边框 1px #3D4A59;标题 28px 黑体居中;通信异常时红字闪烁 | - -## 4.2 StatusStrip(底部状态条) - -**表4-2 StatusStrip** - -| 项 | 设计 | -|---|---| -| 组成 | 底盘电量、底盘电压、清水液位、泡沫液位迷你指示 + 模式徽标 + 返回按钮 | -| 尺寸 | 全宽 1920×94,位于 y=986 | -| 接口 | setBattery(soc)、setVoltage(v)、setLevel(a, f)、setMode(mode)、signal: backClicked | -| 样式 | 背景 #242E3A,上边框 1px #3D4A59;数值异常红闪 | - -## 4.3 LedIndicator(指示灯) - -**表4-3 LedIndicator** - -| 项 | 设计 | -|---|---| -| 组成 | 圆形指示点 32×32 + 右侧文字标签 22px | -| 状态 | 灰(#56636F)/绿(#36C75A)/红(#E5484D)/红闪(500ms) | -| 接口 | setState(State)、setText(text);State 枚举 OFF/GREEN/RED/RED_BLINK | -| 实现 | QWidget 自绘 paintEvent 绘制圆形渐变 + 外发光;闪烁用 QTimer | - -## 4.4 NumPadDialog(数字键盘弹窗) - -**表4-4 NumPadDialog** - -| 项 | 设计 | -|---|---| -| 组成 | 半透明遮罩 + 键盘面板:顶部输入回显、4 列×3 行数字键(1-9、0)、退格、清除 | -| 尺寸 | 键盘面板 960×486,居中弹出 | -| 接口 | setMaxLen(n);signal: confirm(str);cancel() | -| 样式 | 面板 #242E3A、按键 130×98 圆角 12px、数字键主文字 36px | - -## 4.5 ConfirmDialog(确认弹窗) - -**表4-5 ConfirmDialog** - -| 项 | 设计 | -|---|---| -| 组成 | 标题 + 正文 + “确认/取消”按钮 | -| 尺寸 | 560×260 居中 | -| 接口 | static show(par, title, text);signal: accepted/rejected | -| 样式 | 遮罩 #00000066;确认按钮主色、取消按钮普通 | - -## 4.6 AlarmBanner(告警横幅) - -**表4-6 AlarmBanner** - -| 项 | 设计 | -|---|---| -| 组成 | 整行红色文字,支持 500ms 闪烁 | -| 接口 | showAlarm(text)、clear() | -| 样式 | 文字 #E5484D、26px 加粗、居中;闪烁=可见性交替 | - -## 4.7 ParamControl(参数调节控件) - -**表4-7 ParamControl** - -| 项 | 设计 | -|---|---| -| 组成 | 参数名 + 大数值显示(56px)+ 减/加按钮 + 保存按钮(可选)+ 恢复出厂值按钮(可选) | -| 接口 | setValue(v)、setStep(s)、setRange(min,max);signal: valueChanged、saveClicked、factoryResetClicked | -| 样式 | 数值主文字加粗 56px;加减按钮 96×96 圆角 12px | - -## 4.8 DataCard(数据卡片) - -**表4-8 DataCard** - -| 项 | 设计 | -|---|---| -| 组成 | 标题栏(32px)+ 若干“标签:值”行 | -| 接口 | setTitle(t);setField(i, value);setAlarm(field, bool) | -| 样式 | 面板背景、圆角 12px、2px 边框;标签次文字 22px、值主文字 26px 加粗;故障字段红闪 | - -## 4.9 FaultTable(故障分页表格) - -**表4-9 FaultTable** - -| 项 | 设计 | -|---|---| -| 组成 | 表头(序号/故障时间/故障名称)+ 数据行 + 上一页/下一页 + 页码指示 | -| 尺寸 | 每页 6 行,行高 54px | -| 接口 | setData(list)、setPage(p)、signal: pageChanged、rowClicked(index) | -| 样式 | 表头 #2D3947、斑马纹 #2A3442、选中行主色 15% 叠加 | - -# 5 数据与通信接口约定 - -遥控端与车载端经 CAN 总线通信,具体报文 ID、帧格式与解析规则以《洗消机器人遥控器通信协议0708》为准。本文档给出 UI 层需要绑定的信号占位清单,开发时由通信层实现同名回调(C++ 用信号槽 / PySide6 用 Signal)。 - -**表5-1 UI 层信号占位清单(待与通信协议0708核对)** - -| 占位信号 | 方向 | 数据类型/单位 | 用途(绑定界面) | 备注 | -|---|---|---|---|---| -| on_comm_state(ok) | 车载端→UI | bool | 顶条通信状态、全页“通信异常”闪烁 | 心跳/握手判定 | -| on_chassis_state(soc, volt, speed, handbrake, faults) | 车载端→UI | int% / V / km/h / bool / list | ⑤⑥⑧⑨⑩底盘电量电压车速、手刹、底盘故障循环显示 | faults 多条 2s 轮换 | -| on_arm_state(js[], pos, pose, vel, return_state) | 车载端→UI | 角度°/ mm / 姿态 / 状态枚举 | ⑦机械臂状态、关节角、回位状态 | return_state: 待机/回位中/完成/异常 | -| on_wash_state(flowA, flowB, gasFlow, press, airPress, foam) | 车载端→UI | L/min / MPa | ⑨⑩⑪洗消实时流量压力发泡倍数 | | -| on_tank_level(aLevel, foamLevel) | 车载端→UI | L | ⑤⑥⑧⑨⑩⑪液位显示与液位低告警 | | -| on_gas_state(hostState, gasType, gasLevel, conc) | 车载端→UI | 状态/类型/等级/ppb | ⑧气体检测仪状态与浓度 | | -| on_ball_valve_state(d1Open, d1Close, d2Open, d2Close, fault) | 车载端→UI | bool ×4 / 故障码 | ④自检、⑨⑩⑪球阀状态与故障 | 开启到位/关闭到位 | -| on_pump_state(pump, air, leaf, faults) | 车载端→UI | bool ×3 / 故障码[] | ⑨⑩⑪泵上电指示、故障代码轮流显示 | | -| on_estop(triggered) | 车载端→UI | bool | 全页急停横幅 | | -| set_ball_valve(d, open) | UI→车载端 | D1/D2 + bool | ⑪调试维护、⑨⑩启停 | | -| set_pump_power(pump, on) | UI→车载端 | 枚举 + bool | ⑨⑩⑪泵上电控制 | | -| set_speed_rpm(pump, rpm) | UI→车载端 | int | ⑪转速临时设定 | 不保存 | -| cmd_wash_start()/stop() | UI→车载端 | — | ⑨⑩启动/停止 | | -| cmd_arm_return()/pause() | UI→车载端 | — | ⑦系统回位/暂停 | | -| cmd_chassis_move(dir, speed) | UI→车载端 | 方向 + km/h | ⑥行驶控制 | | -| cmd_estop() | UI→车载端 | — | 软急停 | 与物理急停同指令【设计建议】 | -| stored_param(key)→value / save_param(key, value) | UI↔存储区 | int/float | 车速、柱塞泵流量、发泡倍数、泡沫比例、空压机流量、密码 | 上电读取,保存防抖 | - -# 6 待确认事项清单 - -**表6-1 待确认事项清单** - -| 序号 | 事项 | 协议现状 | 建议方案 | -|---|---|---|---| -| 1 | 密码管理登录的管理员密码 | 协议未说明 | 初始与管理密码一致为“6789”,可后续修改 | -| 2 | 密码连续错误锁定策略 | 未说明 | 连续错 5 次锁定 30 秒并提示 | -| 3 | 自检异常后“忽略故障”是否允许进入作业 | 原型有“忽略故障”按钮,协议未说明 | 允许进入,异常项持续闪烁提示 | -| 4 | ⑫故障查询的进入入口 | 原型仅自检页有“故障查询”按钮 | 自检页 + 作业选择页各设一个入口 | -| 5 | 故障历史是否支持手动清除 | 未说明 | 预留“清空历史”按钮,默认隐藏 | -| 6 | ⑧气体检测仪检测中可否返回 | 未说明 | 允许返回,检测状态后台保持,返回前弹提示 | -| 7 | 软急停与物理急停的关系 | 协议要求急停切断底盘动力 | 软急停发送同一急停指令,需人工复位 | -| 8 | 洗消参数存储区定义 | 未说明 | QSettings 本地存储,键名见 5 章 | -| 9 | 屏幕分辨率最终值 | 未说明 | 按 1920×1080 设计,代码以 SCREEN_W/SCREEN_H 常量适配 | -| 10 | ⑨⑩“停止”是否复位洗消系统 | 未说明 | 停止=停泵断阀,不自动复位,需人工复位 | - -# 附录A 交给 DeepSeek 的提示词模板 - -将以下提示词与本文档第 2~5 章内容一并提供给 DeepSeek(可直接复制,按需修改括号内选项): - -——提示词开始—— - -你是资深 Qt 嵌入式界面工程师。请严格按照《图数一体机遥控端 QT 界面详细设计说明书》实现遥控端全部 10 个界面(③开机密码及密码流程、④自检、⑤作业选择、⑥机器人底盘、⑦机械臂、⑧气体检测仪、⑨手动消除、⑩手动消毒、⑪调试维护、⑫故障查询)。要求:1)技术栈:(PySide6 + QSS / Qt 5.15 Widgets + QSS,二选一,全工程一个 main.py 或 main.cpp 可运行演示);2)画布 1920×1080 全屏,严格执行文档第 2 章配色(深色工业风 #161C23/#242E3A/#3D8BFD/#36C75A/#F5A623/#E5484D)、字体字号、按钮/指示灯/弹窗/表格/进度条样式;3)页面结构:统一 BasePage + QStackedWidget + PageRouter 跳转,页面导航、返回、急停、通信异常闪烁按 2.6/2.7/2.8 实现;4)交互逻辑:逐界面实现文档 3.x 章“交互逻辑”表中的每一步(含启动/停止/返回互锁、参数保存与恢复出厂值、系统回位/暂停、球阀四图标状态机、分页故障表、数字键盘弹窗、500ms 闪烁等);5)通信层:按第 5 章占位函数实现一个 MockCommunication 类,定时模拟数据(电量、电压、液位、流量、压力、关节角、气体浓度、故障码等),用 Qt 信号把数据推给界面,便于离线演示;6)参数与密码、故障历史用 QSettings 持久化;7)界面中的【设计建议】项可自行取舍并在代码注释中说明;协议原文要求不得改动;8)输出:完整可运行工程,每个界面一个类,公共组件独立文件,关键逻辑加中文注释,最后给出运行说明。 - -——提示词结束—— - -说明:若需要 DeepSeek 只实现部分界面,可把提示词中的“全部 10 个界面”改为指定编号,并只附对应章节。 - -# 附录B 界面原型映射说明 - -**表B-1 原型映射说明** - -| 协议原型图 | 对应界面 | 原型要点(保留) | 本文档的深色主题化处理 | -|---|---|---|---| -| 开机密码/密码警告/密码管理/密码重置(4 张) | 3.1 ③ | 4 位密码输入、确认/取消、重置流程 4 步 | 保留流程与文案;改为深色面板 + 主色按钮 | -| 系统自检异常/正常(2 张) | 3.2 ④ | 自检项列表、进度条、左右按钮组 | 保留列表项与按钮;异常项红闪、正常项绿 | -| 作业选择(1 张) | 3.3 ⑤ | 左菜单 + 中央 4 卡片 + 右侧手动消除/消毒/返回 | 保留分区与字段;深色卡片化 | -| 机器人底盘(1 张) | 3.4 ⑥ | 左 4 方向按钮 + 中央 3 卡片 + 右侧底盘卡/车速设置 | 保留;增加模式徽标与机械臂未回位横幅 | -| 机械臂(1 张) | 3.5 ⑦ | 左 6 平移按钮 + 右 6 末端按钮 + 系统回位/暂停 + 关节角 | 保留;回位状态图标化 | -| 气体检测仪(1 张) | 3.6 ⑧ | 中央 4 卡片 + 右侧启动/停机/返回 + 浓度 | 保留;浓度大数字显示 | -| 手动消除/手动消毒(2 张) | 3.7/3.8 ⑨⑩ | 洗消参数卡 + 启动/停止/返回 + 底部指示灯条 | 保留;指示灯三态+红闪规范化 | -| 洗消调试(1 张) | 3.9 ⑪ | D1/D2 区 + 泵转速/启停 + 警告横幅 + 指示灯 | 保留;球阀四图标状态机按协议文本细化 | -| 历史故障/气体检测仪历史故障(2 张) | 3.10 ⑫ | 表格(序号/时间/名称)+ 分页 + 分类按钮 | 保留;深色表格 + 汇总卡 | diff --git a/app/global.cpp b/app/global.cpp index 4629db4..5533058 100644 --- a/app/global.cpp +++ b/app/global.cpp @@ -1,5 +1,9 @@ #include "global.h" #include +#include +#include +#include +#include // 启动 500ms 闪烁:每 500ms 切换一次动态属性,QSS 据此在 40%↔100% 透明度间切换 QTimer* startBlink(QWidget* w, const char* prop) @@ -43,6 +47,39 @@ QString cancelButtonStyle(int fontPx) .arg(fontPx).arg(C::DANGER); } +// ===================== 按钮焦点光圈 ===================== +ButtonFocusGlow::ButtonFocusGlow(const QColor& glow, QObject* parent) + : QObject(parent), m_glow(glow) +{ +} + +bool ButtonFocusGlow::eventFilter(QObject* obj, QEvent* ev) +{ + if (ev->type() == QEvent::FocusIn || ev->type() == QEvent::FocusOut) { + QWidget* w = qobject_cast(obj); + if (w && qobject_cast(w)) { + if (ev->type() == QEvent::FocusIn) { + if (!w->graphicsEffect()) { // 挂一圈发光(偏移 0 → 四周光晕) + QGraphicsDropShadowEffect* g = new QGraphicsDropShadowEffect(w); + g->setBlurRadius(55); // 光晕大小(越大越强) + g->setOffset(0, 0); + g->setColor(m_glow); + w->setGraphicsEffect(g); + } + } else { + w->setGraphicsEffect(nullptr); // Qt 会删除旧效果 + } + } + } + return QObject::eventFilter(obj, ev); +} + +void installButtonFocusGlow(QApplication* app) +{ + if (app) + app->installEventFilter(new ButtonFocusGlow(QColor("#7FBBFF"), app)); // 亮蓝,深色底更醒目 +} + QString appStyleSheet() { const QString s = QString(R"QSS( diff --git a/app/global.h b/app/global.h index d2bf4fb..20d29c5 100644 --- a/app/global.h +++ b/app/global.h @@ -7,6 +7,9 @@ #include #include #include +#include + +class QApplication; // ===================== 画布与全局常量 ===================== // 屏幕分辨率(1920×1080 横屏);若部署在更低分辨率屏,可按同一比例整体缩放 @@ -118,6 +121,24 @@ void stopBlink(QWidget* w, const char* prop = "blink"); // 退出/取消按钮预设样式:被选中(悬停/按下/焦点)时红底白字 QString cancelButtonStyle(int fontPx = 60); +// ===================== 按钮焦点光圈 ===================== +// 全局事件过滤器:任意 QPushButton 获得焦点时,在其四周加一圈发光(QSS 无法实现光晕) +class ButtonFocusGlow : public QObject +{ + Q_OBJECT +public: + explicit ButtonFocusGlow(const QColor& glow = QColor("#3D8BFD"), QObject* parent = nullptr); + +protected: + bool eventFilter(QObject* obj, QEvent* ev) override; + +private: + QColor m_glow; +}; + +// 为整个应用安装按钮焦点光圈 +void installButtonFocusGlow(QApplication* app); + // 全局 QSS 样式表 QString appStyleSheet(); diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/QColor.6F0D1A6DAE47D585.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/QColor.6F0D1A6DAE47D585.idx new file mode 100644 index 0000000000000000000000000000000000000000..b7ffd87dba307e75b2bf0f4c912e0861b0ce8933 GIT binary patch literal 202 zcmWIYbaOkzz`)>~;#rZKT9U{DWQzcCaY<2TA&>@xw9K4TD}8-^H!JT9ler i454!pL3D9Za-vgXnG@jya4>3``&a2mk;IK{C_; literal 0 HcmV?d00001 diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/QFontMetrics.0B12EDFFD35A3199.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/QFontMetrics.0B12EDFFD35A3199.idx new file mode 100644 index 0000000000000000000000000000000000000000..e2b2fb2f6349c578277b4726974062b4ee77b296 GIT binary patch literal 214 zcmWIYbaOk$z`)>~;#rZKT9U{DWQzcCaY<2TEszF-w9K4TD}8-^H!JoS literal 0 HcmV?d00001 diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/QGraphicsDropShadowEffect.356DEEDE386B2BA1.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/QGraphicsDropShadowEffect.356DEEDE386B2BA1.idx new file mode 100644 index 0000000000000000000000000000000000000000..ea43d77eca483a7cb0783169601f3f510e9236e9 GIT binary patch literal 238 zcmWIYbaQ*gz`)>~;#rZKT9U{DWQzcCaY<3;R3HroX_+~xR{Hw-ZdUq%A^N6zhNgN( z`nj2T>E#xN@y15_nR&@Mr75ZUfhFOYDe0*t#rlEnMTrF&naRa2MfnB68Hp+R<*sRI zsmUb_q?=Wk4mB$kY=T|}&~=r$Ng$UMrKS}_=$u3lU0jr0EDmBY9z3q~^T=M;c19)! JCXfIG008AXLpA^a literal 0 HcmV?d00001 diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/bootpassword.cpp.2880E253A763ABEF.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/bootpassword.cpp.2880E253A763ABEF.idx index 4441e0883e15847c77141cb5ff72ed6c70393185..a8326a2b37b192125fd88d2aee0d55753eec6689 100644 GIT binary patch literal 5296 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 diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/confirmdialog.cpp.A07B26C68894B406.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/confirmdialog.cpp.A07B26C68894B406.idx index d62b8e79fd7c773ef725025b8eef128cf1ad8a5c..e432f177af97c84570f4f701a881b5d0023b514e 100644 GIT binary patch delta 25 hcmZ1@zeaw;Y<|IGR~IMTKJ3-V&dtHf#?HdY004=}2toh= delta 25 hcmZ1@zeaw;Y<|K2=kjO0Jt-T_&dtHf#?HdY004^#2tNP- diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/global.cpp.3110D8C4024B8807.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/global.cpp.3110D8C4024B8807.idx index 4f0b5bbd89f9a04cea5baba34fcc6eb0210ce5ca..e7ec4204e8a5c780d61e4613306fe9b4590aab32 100644 GIT binary patch literal 4256 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 R))g+{flLtbf;3LJ{Wm5gug?Gg literal 2818 zcmb_ce{2)i9e*z|xr=>yz9i?!@j3P-BoN%fC9DBzghoRfN?U0SE<@dhsN~^r{eIr}`+eUZZ|jz(rUz;OHnncq)8P!-RR91E{{un4>t-HaEIhT{|h9@lO^!EI7QLKu~bB+x>#Y=lA-A4MJ6m+vV9^g^4atP}t@51fSi5 z#cS$TfDPaE2vX#2=}<&EoJ^m1SNJZ*2DNnj9qHv!p`os>BOuJ5{8i@Q{`-kD>30Ud z6-oVv(?>_I=q+<4W>^Wlj0XL zuZ?BNcQ5uy{io-W!&b2dyIgLkRTRZ0tJwUU*s!X;VbyA}1H0&1SHJUn zt3{W`;qGd6ip{~rTn9vK9sA2|+-wzly#Cz*pWWdU?Q3?n+g$;dn0>Ea{g|)5PV5Yd zJzec~&$sVwuAPezhc33cy)Ab4Du>Va|25c-yT$GgHZIf~FTK9SRkzpG3Zz4$(pV^) z-t_s1lo-7G)+iQE%%8lxSU>5?ne@r9bb3^Zg{5B}ol72FtQMFLg`~rAQ5t+b9qv!R zGB7`MWqzdZ?v>P{9bEUjBfp*x4a`L^o#)OshN}YBuy;ldy^YTiwF8t12fh`mO-(0^j9#tQLkU?R{hoL}rKJm(9pXr*?;O#%3pK1Iwy#|Xll%|A;@AOUHd-mhCPhl5G zgUX25h)Su_9Lb1Gl&OS-yBrl*2hETF5L>boS{M>lFY4C5^t8!=%Nc`w44O$mzdxbA ztv}HCVxAEdYl@3y7nM|H5ixr1tn>RFFWzwHG00-HR1u>LNtRjj}-ncUB?AO196;qI(g1Pkk=K0QJ*FSr?7e`xER%DvpENWH#yZ-VcbKvr; zC1pQb5Z4qvM8x1=-zTZhheFs)9P)9vl-N)Fqgj8UYjeNKh_o6lD<6W@unJ_R%nUh_ z5ebx#Lqk8#d_+CAX#hJcF=rwV#Y){siPFU=88z+4sdy zuQxW07cz*dr9=`PgVZ{;QAUPZgGhp6P&KHgJm4q{B)a zfpkQPqmYg&aSYNiC5}TnuEf)jo>t-nq!UVcy<=9-k zaj&pKuHM(i^vC~Z-+ButVG{C_a=mYU-S+QOYmeM6HvU(c@T4osWJJm`{qL(|0 zRN@q5Q!=jG@jlP(F1myB6oq_Lz9!CXN5lX8!PqQTBp{!V=i=u5BTsJQTkqlYQ#vYl z{o|DB47m$`&A`{Q?u*m^!lTL*F}WM`p;5|TmA>>97F%={J?Z@LvYE2qZv6XK*rb-z z=7z(av^AbKGgTv_LRFz!ffV-y9*1(qEb9zrLk%$w m{7$!hVZ;M|M_?)bLc~4X_-N0cHtfsO76C1pegKN(<$nON{;I|R diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/global.h.04FEB1AA1BE5CBA9.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/global.h.04FEB1AA1BE5CBA9.idx index 81b3ead5c9a2030f5b54d1f84c91ab8ab5f56cf6..2c2ebd0c8a3a2f0b57b24b53a6133bad703cc5e3 100644 GIT binary patch literal 9356 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 literal 8058 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 CVk}qy diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/ledindicator.cpp.9844B6B5BDCBA69A.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/ledindicator.cpp.9844B6B5BDCBA69A.idx index 0053c24fc74bf00a8955ea17f4a06a7759bd5803..518ebaf12b4c9b21884a319b261ef44fc0670933 100644 GIT binary patch literal 4180 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 G-hTmP3B{TK diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/ledindicator.h.736A1ED2611C89E9.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/ledindicator.h.736A1ED2611C89E9.idx index ce9222633cb1ab78b57cecc981e9372dfbcb41a8..b8e9fce0559aba06f782fe75a7f416ddd8512bb0 100644 GIT binary patch delta 1000 zcmXw%T}TvB6vyx0nQdpr*_l~q#?^J#opm>gwV>Dx11Z1J64o?=GSUrKSZn=gN7?K{ z5g+P745ly%60$%dkOChH2_&qC%0h^~M97C;>LrO1D(K#^v#|di?(dv)&;I|jtj^>G znj7lsj2wijI~ua-q?uq5LK^vI%(JN%4*~;tDBWfzvu0Bk^(Io?X6-<-+eDe9*_`M| z^=If)iGi6%F+su_;f84B+VY>HqBmu)nfQ0Nf&&BxxPW2{;Lm@u zzo)`qBn5j3)_5(~7QhpY7git5{@pKO55dKJvD+5FD+{rw&kJAvYErPDa9z-4TYz`v zRZLH2CQ}m5B{has7eO&7Y$N-D78c}z^f`XmIwOj8W*8beMWK}wg zcT@l20IYZTY|G&oEGNgrZ>!UJz~vBSFYD#4$Ij>wH5p24roL@Vges~D_i4W1^oeJs zOZV63R~9y1CljdUPz`P~qOAF~2;3vef#N_EmJ#e2pk?{G@F{tX gkGVr^NC1qiF8;7L{-m{MMyr{{k{h`c1c(^$kWa36ek0NbBbq0ZfZ#)3j+g#2oM*S6lKoaC|kxZJ%G{)ACI*HEp6pLf@x5GpOd>1{{4zW;LSTY{ z186W1O!uj|w{!hpJ3b~sptKyP950xFN#8km__*|$?*Rf#l0a#7VJ=~Qeh>kZ&k}Q3 zJhOOaCLfa!P+p!xUI0W)KEfQ#C_Y(&B|%#Ziy4PBm$V>1keI}3!XpaPE5Ru-*@0D@LzYKYm>)_wS)_(fSnIbo&)dAg!TlUK571%muFW!{ZVuHSytxy*m_W4fY)Gb0bb zgouRv;+SKm=hl4M1M?}P6xf3>)i4h-a)EsZ6P}#Pt}ZCdBFqWX#=|eoB0YI7`xic# z^+1C_p4!GyU?{98tN~NV1@fIB%$#jK*&Dw%rLSX@0Xr6^cd`SgDYFcV%;XAAZDx?~ zmvJiaT~*jBAa|?uD9|aOF!;$C$1E)(JvoXil1G+BmJ235`2bg-xR|zR!QY*dT18zNaJOcVdi1unViF@z`sF4@Y_oJld?b| zP8Lq7$t{dp%zV6jlQ%L(GIO(VPv&LP=H=$+7ATssIhp_J(=>+3E=(E{e0P=8^>XLx OGP5u-GB5&7h5`Ts#2V@V delta 99 zcmbQk+QP~j11H%iuNtbjUr13J!FmtnUPtIXfn7o)#iJ6y|ck&6w yNM+|l4;Z}w diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.cpp.939E08F5B3723232.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.cpp.939E08F5B3723232.idx index b242a472fa296584627d445f9c4194c99d29ba0a..dc18bfa78a66a61585b9261432cbb3507a6a45e2 100644 GIT binary patch delta 2174 zcmY*beNdBi9CvKM!*9oo8QT%FDeg4iWp>+8}aopwGzUPYdZ5r zS8PMrP>4Ax@kw@fv?vlyWx*m&VOnT15N#!z%E^H^r7P2wO{k@3Ys^2su2PF=)EL)@ z_aSbvC)%SXf$TUx@!f|v9wr9SsFW%Vh}Ki=u@j-fhS59w@2Qi)MiEtn8L3)nqD+3_ z*7p9D1<@K{^I9HTrHt6YI`Ar~HQg}Xpdyjbs7h5OIEH#q?r`D(P`n$DNI4&$#HTKc zPrRpiM)xn+%jRgU;+lF%y+Yl2X*hOb6GNj0NrQmAXv6Z} zv6iJ^$3j^mh@G#;-qT;XV>SS}ge^%U)=dL^Z^cq)(@Q{OYr(q%H}Kv@^A- z{)x6y)@WjeMjp+hgvkp~xqGrs23=4?{;%KU$fb7x6bKm_G%c`8x0hwdJ}={vA; zs$Nuyf{=UPI(V&H$JBvzeN_ES5{=}x<&0&^-Zda?rp$u>>q|nt-FSR0RK^f*5Gtdh zk%=)0Q@3Yq?_}%l&UK*dpd9$G@Y!LfTO%CLf6>Q>;|I}4RSa^3Iw%qXgPfsG0pSR_ zT5M*`I7gl*ZlPLmlbjJl8}JT!o)RtxOICAvoqXHmiHJ7v0u8`d<@vs%w4y9x6{aq^ zSQraPBg?$N&$Fai0whb)OXm4`))cGIH(1e>(g0*jwguR5c%0&QxcHUyrAF8R;c#V+^nIqh`8U5r7h!HGbrkWq5_tn z3B%plKDu${t?>Pz4r_$9k=*}|bJ|Ny*_AJs90sSZNEh}+R%-MTz0{wYkunMwOmyH}J}AC$BPKrW>i8;e_)oB9qin*P z{M4>B1qOHPZPaOp$>wczBzFHym#}*m7g60U|JDf%@ zq)F<}3sOV#)S&CiQnVyHLdEM+BCM{{$h@e$^w1N9Gwtd(uivxv*K^>h%Dfa!R3*Z)Gl^^}n}HLe^m(i%L@H(BVv-iAGst67FDV@aFKZn`c&{=54f1g`Mc6qjRT- zPwhw@z~K;5B{g(SIyRGpE76sOrNYUox&HnUCvvva_EfAM8OiPI-T7NJQdiMc@Q9G% z2l$;7GRs?~tuoxx7a1S#_MMGh#U}|Xu*TtNlJGDd4Tg!NLJ!o%P<~&AFAuX-TYTS; zy+}}xDpb;y891~ua@W)i|3Pnn4`2~v_0YSAe(EoxT99{(v}GZ#FPO28T3_1NhP*34 z1y}!iY2>DUIJXY5SC&-9b*>-@17+ZbqwmhXzdLvBc^(B~UTa4$|0PCw(!4F*;+l_649P8GMfsMoCO zkb*TCH95gJ7O+CxGung%RuPnZq)!|oCHquCsa=@U&h5e0u*06h6_;K?WVKW6i?LS` zk2f}=NPiX49T+L8q=1i>3fd%$e0}VCj_PT7!@05jeLX1Jz0?i&N*I3N4346&VUYpe zl~8;%>@ZTw{O@XJzRu>=zF|9x!dwy;G)rsibOK#;u(fhf&K(opnJ)(#U+6rEoSn3j zo4wZXq#wPr-XS#2HK2x@J+v_SuHs;(hM0yu6eSN`*K79uDgHCUQ-R(<70jj>^#P4n$L`Ja4;kT`&YOEG5pYtr&_h zMj8ReP7$U^6DPr^L<4^Jjy9csb>|FPdNz|)V-QF(uoYOk*nDbiyLQ1mBCjK^Ly6V1 zpAB9(yd-xX6%Rc|{OdcrwoT4F45&dRHxLu5msj3eUH=!F6PLjCA02U^izFK8hSVUT d9^iq?6PPD|0@frP0*=B}`CBd@lR;88@Go4^)G+`6 diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/passwordmgmtlogin.cpp.AF231AAA0CBB48FC.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/passwordmgmtlogin.cpp.AF231AAA0CBB48FC.idx index 4ae3b93c2f7303563d5f7c9991467099bf74338b..3142d8c89f253c545429b5f54ac3d242b5f45b48 100644 GIT binary patch delta 20 ccmX@7d`@{ogdoSXq6<5$RP^RfP7urk09u6zF8}}l delta 20 ccmX@7d`@{ogdoR*?k6oDySHmhP7urk0B3p$qyPW_ diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/passwordreset.cpp.1B25930C84FBC9DF.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/passwordreset.cpp.1B25930C84FBC9DF.idx index 00c013f73cd8c4ea3ebbf00d63d13aae25e360d5..5e31b3f5988bd2e4d7bc6e9a2c66b15e403c9bed 100644 GIT binary patch literal 5356 zcmcInYfxKN9>1ZNlEBHid0avgE=dR}K`4ZTM^pNM5&?l=3tL1U4IAJBfxJk<%i>lZ zi#t|ZTixBRuU*#}tG3f=Yuj;cyQ`IsTivbWSf^{Xy4JPhYg?yS-Bzu8f<5P6$1khn z<^!DH`JeNDKhABct*-tTOHr<#+OYs1^U@SWAxK4I5#O7O&?5d@6AXr8-k2{GEHe$o zI-~wjESXy8jYda9k)9?#%E#7u`}ptgl$BB4e%>3Y4Tgtf6hFcTW7R%?jE_*gK0jY( zv)QW4Y>n$}B?b190*5W&3-*mV?VUvqn=jbyAMW98jWJg!g8nt}eZzilq-rc2;iFNc z$PeI9Gwic9*7M_4arr;sUW>1%kB>!djW<<>#@ycV5VGNa*PGmSd%Jl5kGkj!@>M;) zA0>3%aJ0X2I2QXsjv^}G@_mDA%4{gugVC_Jo40vOJNv!9sL!_W*Wp+bwinulVz$xY zesA#l-)3Lux6m67+xq;WF0a3!pSa=2vkRk4i`v51lMiJBA1mk%hyPEUe+rF9ujf&B zDA?VC<`pKd)-s7O#Fa+kI%lhMdDDtvqB>yOI+os;n^MM5efH*1@-nN(S78YZ8E zJ6YpF|3OVc0wM!7urPAD+z=2h|AT3}8fJ&1~H5i>$WbRu0{v1Gj zTcxcE?2xB2_q5zNeg&fKKuSP^-H3yMRCT(XwU~*1AucB_KIJ-dsiA7yA8HRz{_HCi zx|=1>GU7wWPjYPLGfgX7?P-eu)aW(YcpE@V zmc=HZa#Q(IjIPbyW%)YyR65d7%W6dq$(CoU@S&TJj6c5b%VG}k4b$Q4(WEE%Za52>{lE`c%A)P)@xaqxnm-=XS#yGg4K@>4;najRqr04gjqg)*P%; z&EO}O9=>e0BEDf&SdU`|;Dl;Ik0W?+{yFR3zF%8WGz#g$6nvM1#dNU?(andRnmyj}A^S8R9HzQVZ9hQcLy8woHM6JMarG&zZ%u<=NX z!Zn3;_=^ZQ=VBjc7YWhm_cd;OzX~7v4x}MG2%!(WPNCIA{e{;?ZYLKJ%e& z=an|(QB|6Xw67`m$lRS+5FGaJ63M|ybBrA zqHJODrHycexvk#NjnvcTX-SpUzjrC^+!yb5qgv0Ua~Z52LWW#Y5=SPBR)xm&gXnIZ zxh@x5e18207hiv=eGqA_mZ`}^xR^Bh!tP+ZA8q%7UgC&H9^}gd1IPV{$w2EsC-%=f z6-lFy-1m6^DIi}ghk^o4DNSlD$&}?j@#K@aA#~SlGUwq#FP6D#A(RZoC8hUfVV1MK z|G8)W_=@%6s^OqbY9mREMkpu}b^T?@%S18rC_EY1p&T4g z3}j%L9GsDW8Ho-@K|^zsQ?I}%(t%TPqyuf=e>+&3;vS{}WN1d@Zt+Y2kfm7>O*|p2 zbH82j+H313P)cl2Y)BK7@hN<1f-=(*FfCDIWvJ4Mulz)_D>=)37pe?5>rTUm5Grz)Vs!dwQqg72^gZZ(qDWSVUL;GwQj&2T zTnSc+P(^YDIeB#I-t$AgGh2}DpcJeUY**1LQ6CkT-I-4}oBncW+cp%t03AreUVV`% zcRcTY?sq6t#UVw_L1!>yzE5iZI&|%1!vn}D^bl0zZ4TyvJfh)@Y`Wv>%9kHP&I-%I zq(V42A{$ZShQ+}N*@O}|tXJ+nRna{3*6)!{M!AtB=pp99@>l=#&L5F=E{DsBy#`>l zzM8!8P}S<|2y(7}sMGoG@~7efG`3lB;AHdiFSpjT>_dw8Df&{e(HxwVfJuoGXT{j< zpH0kFR_{jwJqFJbd>hrYVPFZq6i+4nj3g6ZYUv)kbZULuei_O?I-5*s^y;9kB9x=f zA%+3CLAn77>^)MC2>GNwCy!4025G;p-z3liX#sCSIJh9hxlVVp5`jN##1P3s}S^4C> z$wHgPMqZdKv}f8yG`rPK1}_Usj3rq@s7jWUi0*CBZXgB7eWx5*$Xj_kPDB>^v_1<) zXl{v0m4zW=h!idhrzPyPP`L4_CNAV}*eCWnlG5HnBUCTblPGY|BD084jx0xnmV@P@ z@mdDTL}&$AAwuQJ<)mZcP@?LHfBE82L?ln2et%2oJW9!GbF~AXIvZ@dXOCv}XXw$x zTlj2jYu*z{5%c-oU!X?osq|FgibgJI8feCc;zq8Xk*vXK^6*9f=MU_*UPGxSevw3Y zzc>ET9*uNIx5gJB{%7GQfsE&Qed99uS1F7#NdctEvXsSgDjCx$YO%1C3rmHtB;Sb? Vg}&(VF9|OwDn(c-g{4eb{ugogHje-R literal 5098 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 Yxg@`Y;gb#vktid%R3w-5mz+rSUk}ycSpWb4 diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/passwordreset.h.02991F109F376ECC.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/passwordreset.h.02991F109F376ECC.idx index 4870370766f5dbdff507e566b5b03e9c74657d43..25c24f075c2cbc62d3bc3a42417289d5b98811f4 100644 GIT binary patch literal 1844 zcmcIke{2&~9DjG~uY0>|OV_m}ZO8Z#!+`8cqf;B_+?vfy5pZELC2_g7H+rtU>w34X z3kpbd8u_&hB=Cod%K|zK3k!%un_#l2L@_ahE1IB5iX18L&|1}$qG7aNP}OcFn`jbMQClx;7XNLDM9|}F zBw4IaNE(W#L?PQKXF4?`c8RjqAf+@hi`t}=7~y&T;RsKnwW}E+F7iTEYf_L@i8tnO zxHhvo#CK?XcV|+N3v;v7I`f$!xm7+UsA6UEKMR*Bpv&s$D&v{V{}efi(yd8J*2qgT zxJkEm38_vIDRP|2#tzta2QQV@pdsmbnZ#Vaztn4%Fbht^sRF^ zX{QM>J-(hY>|=ZmWJ8E19nin&;#bG=M^-v%J8`Q%wG4Y1@2vaw2sQER-g6-*?I7-$ zFSZza7>^51uM74bS!~t~7A7BG6V}ks>%}*%GuINcS%@KEy4VD-axUbrex)+^Fo$}B{Bs*KeF2fwh zm4SP*>J@YEPw7ie+CtpheA|{_2jeIK_le|%?OXfSUUkw|;*R>FORuN8k1&-UyM9ZkwBf zO&~Z4sS6DuL1+pa0)u(S>6Y^?oBs^YLvb)a@=52G<#$tV1Kh2BZ;sw~nj5V3D_feT zzO12Kb1-l87d>PBBT`4vbIg!~#xqS*sE{x~Gy><~=!W-L?}MA>6)^UYwfpsbzo!W} zW-(I%yZd);zcTopQzd3y3&8w-?KL}pc5hcfB9I1}lTe{IB?QUu=)2Y-UEZT>5#sIz zEudEk=|+#vmg_h9IiT00WlfX)Km=J9oD|2NYQ zc%sMWVa`4G+q0u}4I}hSqrqVo2Tj3ZxCx*>(NVuGfC=2htltta12)3IKS_rkrl~oC z&CMG-(f`h8HxA|t4!{@TY7fD{qM)^SyxOpV6e&e7VI7Q6*O#^dQ vObJWK(W#%e{_uhIX&VLmpbKXILuxjzdi5lQ|C7GNA06-xl-X7vpls-Gyskw^ literal 1676 zcmb_cYitx%6uxu2kC}F6cUiW(p}PfCe$Z-|b%RAW*4l0;X+Xq=M}fpYrs$-G4ago9%EO2I?0~B zbI!fzobP3@nVN@^R0?Ux&IUj=X*A-8~bd zCngT=zIFKM!pH5aBx@v1>qx7ydRde8HPROOzn*ZIytYb7$;)GkPNE4}QtMKgHl4`r za!RjN61uFCW+fqqMNwQ479m@UmXV^eC{;AZB}G$2(}qITnP-Dyt1fo5#idlvu2UMb zuNkPViA|CwFNyze=`uNVs(}vjCL7~QN{2tiM38K3mlAC+8MLN~2s7Y9v zAR`GS+9Jnb=3A3Z8)4>;hMCDf_FfLUs8En4fc0`-H(|3cuaMqt1kB2sUa2PVXZc+lW^u5(r<`%-o3hZ)3Aeb(4L?7yG?`V zyVtExr*}tAIcO1t1AJhvX)t`lam=&ebmFv^Qmifr!h8%*RlINQ{w;aUMXeZia?ZIJ zJ{iBdV|(xF8!l?Yu$yyxFicdrSz8H_a>t&!;NX=4#=;g^iufhZeLM50=ZBGo1C#I2 zBZC%Zj_JlpDyQauvS_CDX@+No1wt9NxUY%FN<%cHO3v`;LEkyKgkt4hjem7P|w8@T-c9*r^VE2Xz^i@gpI4 z$Dpopx3C>N1#aU`p&Ra0LV6O;PT$%7%LV)EEQ1?S1_ZZiYE<(XRqR*_K1U<{yViFc JZaBo)$={wr21oz^ diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/qgraphicseffect.h.A493CFD84F8BD4D5.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/qgraphicseffect.h.A493CFD84F8BD4D5.idx new file mode 100644 index 0000000000000000000000000000000000000000..be9b2727f4378dfdde36ed3efe73fa274df642e0 GIT binary patch literal 13544 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 literal 0 HcmV?d00001 diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/selfcheck.cpp.776FCF2AC614C2A9.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/selfcheck.cpp.776FCF2AC614C2A9.idx index 16f17fe657659b54c4162f1506b5d1e5b6146750..0878ff6e8f8b67ce95adcdf3ad922bbcc50c1696 100644 GIT binary patch literal 8346 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 HOQrfh)1?r* diff --git a/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/selfcheck.h.2647BC27006C5072.idx b/build/Desktop_Qt_5_15_2_MinGW_32_bit-Debug/.qtc_clangd/.cache/clangd/index/selfcheck.h.2647BC27006C5072.idx index 755877cdd931592e6c8cf319acc823e6ab03b126..5a183f150cb2a30b2ffd82b2593fcb137b344608 100644 GIT binary patch literal 2728 zcmb_ce^3;46yIBqJHD{DcLxX@zl7lUagd9sjYC5UB6^i2Vpdwwakp?6#~s}635;b9 zSs;?2W?80|8i;`iInFdlW#MRJO*)Q^nxmEi{wTpLQzx6=?%g9{{IeT)yWjWuzMuQv zXQ8>E;G-alnr$=JRPdrjNl{c7{0pMTF_(rH>6i1MU;HoYcEn$<-#xfv<^2B#maM*M~dwhhv493nU$4WIVF>;61i%x z-Qx1gXB@@8VF!=u#Vb&7>v z-ct()N0|$%f|pm^B_N%=O@K$Gzm4z;-Gu9sQV=boS9%e#b#B)@-dRbxU1r%!f#euY zkGo5t_s}MIAN>gVQt!1&D5!B zmG3@9R4Nrq5&5Jb0WAmji}e>6(?9)klxGd0qv)%dD_A4hcb#ydFk022t2+uRt zH0*qM;WQl`gK#JbjX=2m(elWSV`RRLjzl<$L`5P@cGY(GUwd~UONT=2L^d%}76=~> zIeW9{jdKni9f8)-Bzn|(Uw3hh>4zq_jt)mSmc)jk^by2II$+n}SP&_01AgrfcGwTG5i?RjfhS_8SK>C+6d zK=^vX1?QxbMeEcw@B`7PG@-Jf3>2k+KN7&rT0Acx{zf}X>%l&GVse};(7xWdd}BxX za~*1W0)DqZRp5Q;O+RtR`{Gc0pN=+QdSN6?kM>`Da`(O5kuzViv<}>-grvmC0^!Es zzWTB0Q-zY{6|2R2 zv5F8m655`>)7jQJ%{*zG`cF?wzVR_r0z^^-DkA(IDcmDaOG|`K9Q)#SCH+;Eu3(5h zT5rVcSH(u(G{xj(Odv$9QZwj;AxX-lAgqNU$xLzx4oYp_6Yb%)ZJFT75NOb#2`(t~ zLt0FXyQ#0|hhrVI)mt~*ssP`bSd9_YxYTf4T4q$QU$gSu z&I>vLZcD>}#p8~{ZE3ghc5m(=%YD_n%s)CuetT+f|CUR`(dnAk7u-`P9H>$f__Nc zgy~>J$WkIERHN0n&!cBQZM)v9{Z>g}hlw6PJwsBJsahl|hNLOewAg5dn3N_hvJ`S1 zgp-I4!=WjtC4xgWT7g<3HdJHXpq2;?)i_$?az=`S!X;|M+lS*%aFIWXoSKy-Ij!@`8@K}XJsRQKA+pTpcSLGV$KsBYto>0i4lHy;I6f4>Q literal 2658 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 // 初始页面:开机密码 - m_stack->setCurrentIndex(PageBoot); + // m_stack->setCurrentIndex(PageBoot); + // 免密码直接进自检页(恢复原流程时改回上面的 PageBoot) + m_stack->setCurrentIndex(PageSelfCheck); } MainWindow::~MainWindow() diff --git a/pages/selfcheck.cpp b/pages/selfcheck.cpp index fd63238..270e055 100644 --- a/pages/selfcheck.cpp +++ b/pages/selfcheck.cpp @@ -20,56 +20,67 @@ SelfCheckPage::SelfCheckPage(AppContext* ctx, QWidget* parent) root->setSpacing(0); m_titleBar = new TitleBar(ctx, this); - m_titleBar->setTitle("自检界面"); + m_titleBar->setTitle("系统启动及自检"); root->addWidget(m_titleBar); // 主区 QHBoxLayout* main = new QHBoxLayout(); - main->setContentsMargins(36, 16, 36, 16); - main->setSpacing(32); + main->setContentsMargins(20, 30, 20, 30); + main->setSpacing(40); - // 左按钮列(垂直居中 + 平均分布) + // 两侧按钮统一样式:字号在此统一调整;按钮会拉伸填满整列(sideBtnH 为最小高度) + const int sideBtnH = 200; + const QString sideBtnStyle = "font-size:60px;"; + auto makeSideBtn = [&](const QString& text, const QString& variant, QWidget* parent) { + QPushButton* b = button(text, variant, parent); + b->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); // 纵向可拉伸 + b->setMinimumHeight(sideBtnH); + b->setStyleSheet(sideBtnStyle); + return b; + }; + + // 左按钮列(按钮按列高平分,填满整列) QWidget* left = new QWidget(this); QVBoxLayout* leftLay = new QVBoxLayout(left); - leftLay->setContentsMargins(0, 0, 0, 0); - leftLay->setSpacing(8); - QPushButton* faultQuery = button("故障查询", "", left); - faultQuery->setFixedHeight(120); - connect(faultQuery, &QPushButton::clicked, this, [this]() { emit navigate(PageFault); }); - m_ignore = button("忽略故障", "", left); - m_ignore->setFixedHeight(120); + leftLay->setContentsMargins(20, 220, 20, 220); + leftLay->setSpacing(220); + m_faultQuery = makeSideBtn("故障查询", "", left); + connect(m_faultQuery, &QPushButton::clicked, this, [this]() { emit navigate(PageFault); }); + m_ignore = makeSideBtn("忽略故障", "", left); connect(m_ignore, &QPushButton::clicked, this, &SelfCheckPage::onIgnoreFault); m_ignore->setEnabled(false); - leftLay->addStretch(1); - leftLay->addWidget(faultQuery); - leftLay->addStretch(1); - leftLay->addWidget(m_ignore); - leftLay->addStretch(1); - left->setFixedWidth(270); + leftLay->addWidget(m_faultQuery, 1); + leftLay->addWidget(m_ignore, 1); + left->setFixedWidth(300); main->addWidget(left); // 中央区 QWidget* center = new QWidget(this); QVBoxLayout* centerLay = new QVBoxLayout(center); centerLay->setContentsMargins(0, 0, 0, 0); - centerLay->setSpacing(12); + centerLay->setSpacing(0); - m_status = label("自检中", 36, C::WARNING, true, center); + centerLay->addStretch(1); // 上方留白 + + m_status = label("自检中", 60, C::WARNING, true, center); m_status->setAlignment(Qt::AlignCenter); centerLay->addWidget(m_status); + centerLay->addSpacing(16); // 10 个自检项,两列 QGridLayout* grid = new QGridLayout(); - grid->setSpacing(12); + grid->setSpacing(8); const QString names[10] = { "通信系统", "底盘通信", "机械臂通信", "洗消通信", "传感器信号", "清水液位", "球阀D1开启", "球阀D1关闭", "球阀D2开启", "球阀D2关闭" }; for (int i = 0; i < 10; ++i) { LedIndicator* led = new LedIndicator(names[i], center); - led->setState(LedIndicator::Off); - QLabel* res = label("待检测", 20, C::TEXT_SUB, false, center); - res->setFixedWidth(120); + led->setFixedHeight(80); + led->setRadius(26); + led->setTextPixelSize(60); + QLabel* res = label("", 50, C::TEXT_SUB, false, center); + res->setFixedWidth(200); QWidget* row = new QWidget(center); QHBoxLayout* rowLay = new QHBoxLayout(row); rowLay->setContentsMargins(0, 0, 0, 0); @@ -79,41 +90,38 @@ SelfCheckPage::SelfCheckPage(AppContext* ctx, QWidget* parent) m_leds.append(led); m_results.append(res); } - centerLay->addLayout(grid, 1); + resetItems(); // 初始化 10 个自检项 + centerLay->addLayout(grid); - // 进度条 + centerLay->addSpacing(50); // 文字与进度条之间的间隙 + + // 进度条(位于屏幕约 3/4 高度处,文字全部在其上方) m_progress = new QProgressBar(center); m_progress->setRange(0, 100); m_progress->setValue(0); - m_progress->setFixedHeight(54); - m_progress->setFormat("%p%(0/10)"); + m_progress->setFixedHeight(60); centerLay->addWidget(m_progress); + centerLay->addStretch(3); // 下方留白(更大)→ 进度条落在约 3/4 处 + main->addWidget(center, 1); - // 右按钮列(垂直居中 + 平均分布) + // 右按钮列(按钮按列高平分,填满整列) QWidget* right = new QWidget(this); QVBoxLayout* rightLay = new QVBoxLayout(right); - rightLay->setContentsMargins(0, 0, 0, 0); - rightLay->setSpacing(8); - QPushButton* help = button("操作说明", "", right); - help->setFixedHeight(120); + rightLay->setContentsMargins(20, 140, 20, 140); + rightLay->setSpacing(140); + QPushButton* help = makeSideBtn("操作说明", "", right); connect(help, &QPushButton::clicked, this, &SelfCheckPage::onHelp); - QPushButton* start = button("启动自检", "primary", right); - start->setFixedHeight(120); + QPushButton* start = makeSideBtn("启动自检", "", right); connect(start, &QPushButton::clicked, this, &SelfCheckPage::startSelfCheck); - m_job = button("作业选择", "", right); - m_job->setFixedHeight(120); + m_job = makeSideBtn("作业选择", "", right); connect(m_job, &QPushButton::clicked, this, &SelfCheckPage::onJobSelect); m_job->setEnabled(false); - rightLay->addStretch(1); - rightLay->addWidget(help); - rightLay->addStretch(1); - rightLay->addWidget(start); - rightLay->addStretch(1); - rightLay->addWidget(m_job); - rightLay->addStretch(1); - right->setFixedWidth(270); + rightLay->addWidget(help, 1); + rightLay->addWidget(start, 1); + rightLay->addWidget(m_job, 1); + right->setFixedWidth(300); main->addWidget(right); root->addLayout(main, 1); @@ -130,6 +138,23 @@ void SelfCheckPage::showEvent(QShowEvent* ev) m_autoStarted = true; startSelfCheck(); } + // 进入后聚焦:自检进行中聚焦“故障查询”;已完成后聚焦“作业选择” + QTimer::singleShot(0, this, [this]() { + if (m_job->isEnabled()) + m_job->setFocus(); + else + m_faultQuery->setFocus(); + }); +} + +// 复位 10 个自检项:指示灯置灰、结果“待检测” +void SelfCheckPage::resetItems() +{ + for (int i = 0; i < 10; ++i) { + m_leds[i]->setState(LedIndicator::Off); + m_results[i]->setText("待检测"); + m_results[i]->setStyleSheet(QString("color:%1;font-size:60px;").arg(C::TEXT_SUB)); + } } void SelfCheckPage::startSelfCheck() @@ -138,14 +163,9 @@ void SelfCheckPage::startSelfCheck() m_job->setEnabled(false); m_ignore->setEnabled(false); m_progress->setValue(0); - m_progress->setFormat("%p%(0/10)"); - m_status->setText("自检中"); - m_status->setStyleSheet(QString("color:%1;font-size:36px;font-weight:700;").arg(C::WARNING)); - for (int i = 0; i < 10; ++i) { - m_leds[i]->setState(LedIndicator::Off); - m_results[i]->setText("待检测"); - m_results[i]->setStyleSheet(QString("color:%1;font-size:22px;").arg(C::TEXT_SUB)); - } + m_status->setText("自检中..."); + m_status->setStyleSheet(QString("color:%1;font-size:60px;font-weight:700;").arg(C::WARNING)); + resetItems(); ctx()->comm()->sendSelfCheckStart(); } @@ -163,15 +183,13 @@ void SelfCheckPage::onSelfCheckItem(int index, bool ok) if (ok) { m_leds[index]->setState(LedIndicator::Green); m_results[index]->setText("正常"); - m_results[index]->setStyleSheet(QString("color:%1;font-size:22px;").arg(C::SUCCESS)); + m_results[index]->setStyleSheet(QString("color:%1;font-size:60px;").arg(C::SUCCESS)); } else { m_leds[index]->setState(LedIndicator::RedBlink); m_results[index]->setText("异常"); - m_results[index]->setStyleSheet(QString("color:%1;font-size:22px;font-weight:700;").arg(C::DANGER)); + m_results[index]->setStyleSheet(QString("color:%1;font-size:60px;font-weight:700;").arg(C::DANGER)); } - int pct = (index + 1) * 10; - m_progress->setValue(pct); - m_progress->setFormat(QString("%p%(%1/10)").arg(index + 1)); + m_progress->setValue((index + 1) * 10); } void SelfCheckPage::onSelfCheckDone(bool allOk) @@ -179,19 +197,22 @@ void SelfCheckPage::onSelfCheckDone(bool allOk) m_done = true; if (allOk) { m_status->setText("自检完成"); - m_status->setStyleSheet(QString("color:%1;font-size:36px;font-weight:700;").arg(C::SUCCESS)); + m_status->setStyleSheet(QString("color:%1;font-size:60px;font-weight:700;").arg(C::SUCCESS)); m_job->setEnabled(true); + m_job->setFocus(); // 自检完成后聚焦到“作业选择” + // 自检完成后停留在本界面,不自动跳转(需进入作业选择请手动点击) // 【设计建议】自检完成 2s 后自动进入作业选择 - QTimer::singleShot(2000, this, [this]() { - if (m_done && isVisible()) - emit navigate(PageJob); - }); + // QTimer::singleShot(2000, this, [this]() { + // if (m_done && isVisible()) + // emit navigate(PageJob); + // }); } else { m_status->setText("无法完成自检 请检查设备"); - m_status->setStyleSheet(QString("color:%1;font-size:36px;font-weight:700;").arg(C::DANGER)); + m_status->setStyleSheet(QString("color:%1;font-size:60px;font-weight:700;").arg(C::DANGER)); startBlink(m_status, "blink"); m_ignore->setEnabled(true); m_job->setEnabled(true); + m_faultQuery->setFocus(); // 出现故障时聚焦“故障查询” } } diff --git a/pages/selfcheck.h b/pages/selfcheck.h index a800efa..96fde65 100644 --- a/pages/selfcheck.h +++ b/pages/selfcheck.h @@ -31,11 +31,14 @@ private slots: void onHelp(); private: + void resetItems(); // 复位 10 个自检项(指示灯置灰、结果“待检测”) + TitleBar* m_titleBar = nullptr; QLabel* m_status = nullptr; QVector m_leds; QVector m_results; QProgressBar* m_progress = nullptr; + QPushButton* m_faultQuery = nullptr; QPushButton* m_ignore = nullptr; QPushButton* m_job = nullptr; bool m_autoStarted = false; diff --git a/widgets/ledindicator.cpp b/widgets/ledindicator.cpp index 9f2179a..5e1fb4f 100644 --- a/widgets/ledindicator.cpp +++ b/widgets/ledindicator.cpp @@ -1,8 +1,19 @@ #include "ledindicator.h" #include #include +#include #include "global.h" +QSize LedIndicator::sizeHint() const +{ + QFont f = font(); + f.setPixelSize(m_textPx); + const QFontMetrics fm(f); + // 宽度 = 文字起点(圆点区 + 左侧 10px) + 文字宽度 + 右侧 10px + const int w = textLeft() + fm.horizontalAdvance(m_text) + 10; + return QSize(w, 52); // 高度与构造函数 setFixedHeight(52) 一致 +} + LedIndicator::LedIndicator(const QString& text, QWidget* parent) : QWidget(parent), m_text(text) { @@ -35,6 +46,7 @@ void LedIndicator::setState(State s) void LedIndicator::setText(const QString& t) { m_text = t; + updateGeometry(); // 文字变了,重新按新宽度请求布局 update(); } @@ -84,8 +96,8 @@ void LedIndicator::paintEvent(QPaintEvent*) // 文字 p.setPen(QColor(C::TEXT)); QFont f = p.font(); - f.setPixelSize(24); + f.setPixelSize(m_textPx); p.setFont(f); - const QRectF textRect(m_radius * 2 + 16, 0, width() - m_radius * 2 - 16, height()); + const QRectF textRect(textLeft(), 0, width() - textLeft() - 10, height()); p.drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, m_text); } diff --git a/widgets/ledindicator.h b/widgets/ledindicator.h index 4398dc0..cd961de 100644 --- a/widgets/ledindicator.h +++ b/widgets/ledindicator.h @@ -17,19 +17,24 @@ public: void setState(State s); void setText(const QString& t); + void setTextPixelSize(int px) { m_textPx = px; updateGeometry(); update(); } // 文字字号 + void setRadius(int r) { m_radius = r; updateGeometry(); update(); } // 圆形指示点半径 State state() const { return m_state; } - QSize sizeHint() const override { return QSize(140, 44); } + QSize sizeHint() const override; // 宽度按文字实际宽度计算,避免文字被裁 protected: void paintEvent(QPaintEvent*) override; private: + int textLeft() const { return m_radius * 2 + 18; } // 文字起点:圆点区 + 左侧 10px 留白 + State m_state = Off; QString m_text; QTimer* m_blink = nullptr; bool m_on = true; int m_radius = 16; // 圆形指示点 32×32 + int m_textPx = 24; // 文字字号 }; #endif // LEDINDICATOR_H diff --git a/widgets/titlebar.cpp b/widgets/titlebar.cpp index d36de11..400f1d0 100644 --- a/widgets/titlebar.cpp +++ b/widgets/titlebar.cpp @@ -18,31 +18,49 @@ TitleBar::TitleBar(AppContext* ctx, QWidget* parent) setStyleSheet(QString("QWidget#TitleBar{background-color:%1;border-bottom:1px solid %2;}") .arg(C::PANEL, C::BORDER)); - QHBoxLayout* lay = new QHBoxLayout(this); - lay->setContentsMargins(24, 0, 24, 0); - lay->setSpacing(20); - - // 通信状态 - m_comm = new LedIndicator("通信正常", this); + // 左侧区(通信状态) + QWidget* leftBox = new QWidget(this); + QHBoxLayout* leftLay = new QHBoxLayout(leftBox); + leftLay->setContentsMargins(0, 0, 0, 0); + leftLay->setSpacing(20); + m_comm = new LedIndicator("通信正常", leftBox); m_comm->setState(LedIndicator::Green); - lay->addWidget(m_comm); + leftLay->addWidget(m_comm); + leftLay->addStretch(1); + + // 右侧区(时间 + 软急停) + QWidget* rightBox = new QWidget(this); + QHBoxLayout* rightLay = new QHBoxLayout(rightBox); + rightLay->setContentsMargins(0, 0, 0, 0); + rightLay->setSpacing(20); + m_time = new QLabel("", rightBox); + m_time->setStyleSheet(QString("color:%1;font-size:60px;").arg(C::TEXT_SUB)); + m_time->setAlignment(Qt::AlignCenter); + m_estop = new QPushButton("急停", rightBox); + m_estop->setProperty("variant", "estop"); + m_estop->setStyleSheet("font-size:60px;"); + m_estop->setFixedSize(180, 80); + rightLay->addStretch(1); + rightLay->addWidget(m_time); + rightLay->addWidget(m_estop); + + // 左右两侧等宽 → 中间标题恰好居中于屏幕 + const int sideW = 380; // 需 >= 较宽一侧所需宽度(右侧:时间 + 急停) + leftBox->setFixedWidth(sideW); + rightBox->setFixedWidth(sideW); // 标题(居中) m_title = new QLabel("", this); m_title->setAlignment(Qt::AlignCenter); - m_title->setStyleSheet(QString("color:%1;font-size:40px;font-weight:700;").arg(C::TEXT)); + m_title->setStyleSheet(QString("color:%1;font-size:60px;font-weight:700;").arg(C::TEXT)); + + QHBoxLayout* lay = new QHBoxLayout(this); + lay->setContentsMargins(24, 6, 24, 6); + lay->setSpacing(0); + lay->addWidget(leftBox); lay->addWidget(m_title, 1); + lay->addWidget(rightBox); - // 时间 - m_time = new QLabel("", this); - m_time->setStyleSheet(QString("color:%1;font-size:26px;").arg(C::TEXT_SUB)); - m_time->setAlignment(Qt::AlignCenter); - lay->addWidget(m_time); - - // 软急停按钮 - m_estop = new QPushButton("急停", this); - m_estop->setProperty("variant", "estop"); - m_estop->setFixedSize(130, 64); connect(m_estop, &QPushButton::clicked, this, [this]() { if (m_ctx->estopTriggered) { if (ConfirmDialog::confirm(window(), "急停复位", "确定复位急停并恢复系统?")) @@ -51,7 +69,6 @@ TitleBar::TitleBar(AppContext* ctx, QWidget* parent) m_ctx->triggerEstop(); } }); - lay->addWidget(m_estop); // 通信状态刷新 connect(m_ctx->comm(), &UdpCommunication::commOkChanged, this, [this](bool ok) { diff --git a/界面设计可视化预览(HTML).html b/界面设计可视化预览(HTML).html deleted file mode 100644 index 3997baf..0000000 --- a/界面设计可视化预览(HTML).html +++ /dev/null @@ -1,223 +0,0 @@ - -

- - -
① 10 个界面的导航流程(依据协议③~⑫)
-
- - - - ③ 开机密码 - 密码 6789 - - - 正确 - - - ④ 自检 - 10 项 + 进度条 - - - 完成/忽略 - - - ⑤ 作业选择 - 6 个作业入口 - - - 选择 - - - ⑥~⑪ 作业界面 - 底盘/机械臂/检测/洗消 - - - - 密码错误 - - 密码警告页 - 重新输入 - - - - 忘记/修改 - - 密码管理 - 登录→勾选重置√ - 输入新密码 - “修改成功”2s - - - - ⑫ 故障查询 - 每页 6 条/分类筛选 - - 故障查询 - - - - 急停(全局) - 全系统停止 - - 任意界面可触发 - - - - 关键规则 - ⑨⑩运行中返回无效 - - - 公共框架 - 顶条:通信/标题/急停 - 底条:电量/电压/液位 - 警示红字 500ms 闪烁 - - - - - - -
示意:依据《技术协议(初版)》③~⑫ 及文档【设计建议】绘制的导航关系;⑫可从④自检页与⑤作业选择页进入。
-
- - -
② 深色工业配色体系(QSS 十六进制,画布 1280×800)
-
-
-
-
主背景
-
#161C23
-
-
-
-
面板/弹窗
-
#242E3A
-
-
-
-
按钮常态
-
#2D3947
-
-
-
-
强调主色
-
#3D8BFD
-
-
-
-
成功/到位
-
#36C75A
-
-
-
-
警示
-
#F5A623
-
-
-
-
危险/急停
-
#E5484D
-
-
-
-
禁用底
-
#56636F
-
-
-
-
主文字
-
#E6EDF3
-
-
-
-
次文字
-
#9AA7B4
-
-
- - -
③ 关键界面深色效果示意(按文档线框还原,非真实截图)
-
- - -
-
- ● 通信正常 - 【作业选择】 - 急停 -
-
-
-
机器人底盘
-
机械臂
-
气体检测仪
-
调试维护
-
-
-
-
底盘
-
电量:85% 电压:360V
-
故障:无
-
-
-
洗消
-
A液位:100L 泡沫液位:30L
-
-
-
机械臂
-
末端XYZ 姿态RX…
-
-
-
检测仪
-
点火S类2级 浓度300ppb
-
-
-
-
手动消除
-
手动消毒
-
返回
-
-
-
底盘电量:85% 底盘电压:360V 清水液位:100L 泡沫液位:30L 行车模式
-
- - -
-
- ● 通信正常 - 【手动消毒】 - 急停 -
-
-
-
洗消模式
-
A液位
-
泡沫液位
-
-
-
A药剂流量
-
2.0 L/min
-
空压机压力
-
0.35 MPa
-
- 发泡倍数 6 - 泡沫比例 3% -
-
-
-
启动
-
停止
-
保存
-
返回
-
-
-
- 指示灯:●启停 ●柱塞泵 ●空压机 ●液位低 ○D1 ○D2 ○系统故障 -
⚠ 警告:该模式下无保护功能,操作请谨慎!(红色闪烁)
-
-
-
- -
注:以上界面效果为深色工业主题示意图,控件坐标、状态机与交互细节以 Word 说明书第 3 章为准;协议原文要求以黑体加粗引用,设计补充均标注【设计建议】。
-
-