# basetool-up-opencode **Repository Path**: emrof/basetool-up-opencode ## Basic Information - **Project Name**: basetool-up-opencode - **Description**: test\test\test\test\test\test - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: refactor - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-03 - **Last Updated**: 2026-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # baseup — baseTool 串口上位机工程 本仓库是串口上位机 **baseTool** 的升级基线工程:`master` 分支为 v0.15.0 原始基线,`refactor` 分支已完成 **v0.16.0 重构**(模块化拆分 + 全部风险点修复)。 ## 项目简介 baseTool 是一个基于 Qt 的串口/UDP 调试上位机,核心功能: - **数据收发**:串口、UDP,支持分包模式与协议校验分包 - **协议解析**:帧头/帧长/帧尾/校验(crc16 / crc8 / sum / modbus_crc16)/插帧规则自定义,14 种解析类型(u8、u16、1~7bit 位域、hex、时间) - **曲线显示**:在线分析、文档分析双曲线图(QCustomPlot),游标、跟随、图例、缩放 - **报文发送**:普通包、复杂包、发送区自动发送(定时)、四类控件包(复选框/数值框/下拉框/按钮)动态绑定报文字节 - **日志与持久化**:接收日志自动保存 + 目录树浏览 + 离线重放;协议/表格/控件配置 CSV 导入导出,参数 QSettings 保存 ## 目录结构 ``` baseup/ ├── base_tool_v0.15.0/ # baseTool 源码工程(qmake) │ ├── modules/ # v0.16.0 重构新增:Protocol/TableCsv/Log/Send/Plot 管理模块 │ └── ...(其余目录见 docs/ARCHITECTURE.md §2) ├── docs/ │ └── ARCHITECTURE.md # 架构文档:模块职责、线程模型、数据流、协议系统、风险状态、升级指南 ├── scripts/ │ └── build.ps1 # 构建脚本(qmake + mingw32-make + windeployqt 部署) └── README.md ``` 源码内部结构详见 `docs/ARCHITECTURE.md` §2(文件职责表)。 ## 构建要求 - **Qt 5.14.2(MinGW 64bit)** + qmake(Qt Creator 可直接打开 `base_tool_v0.15.0/base_tool.pro`) - 本机 Qt 位于 `D:\Qt\5.14.2\mingw73_64`(qmake)与 `D:\Qt\Tools\mingw730_64`(mingw32-make);命令行构建前先加入 PATH: ```powershell $env:Path = "D:\Qt\5.14.2\mingw73_64\bin;D:\Qt\Tools\mingw730_64\bin;" + $env:Path ``` - 命令行构建: ``` mkdir build && cd build qmake ..\base_tool_v0.15.0\base_tool.pro mingw32-make -j8 ``` - 运行后会在工作目录生成 `save_data/`(`Setting.ini`、协议/表格 CSV、日志) - 注意:源码含 UTF-8 中文注释;若换 MSVC 工具链需处理编码与 `RC_ICONS` 兼容性 > ✅ 构建已验证(2026-08-03):本机 Qt 5.14.2 MinGW 64bit 下 `qmake + mingw32-make -j8` 构建通过、零警告零错误,产物 `build/release/base_tool.exe`;界面为左侧栏导航 + 5 分组页面(响应式布局),控件尺寸已优化为紧凑比例,见 `docs/ARCHITECTURE.md` §3.2。 ## 版本规划 - `master`(`3571b98`):v0.15.0 原始基线 - `refactor`:v0.16.0 重构——basetool.cpp 由 10929 行拆分为 5 个模块(约 5700 行);修复线程安全/越界/VLA/弃用 API/资源泄漏/性能 15 项风险;构建脚本自动部署 Qt/MinGW DLL;**界面重构**——左侧可折叠导航栏 + 5 个分组页面(数据流/日志/曲线/数据表格/协议,侧栏箭头按钮底部折叠/展开、分组页 QSettings 记忆)、响应式设计(窗口变窄自动上下排布)、现代简约 QSS、曲线页右键菜单整合(显示模式切换/图像操作);**界面优化**——控件尺寸缩小约 30%(按钮/输入框/下拉框/复选框/侧栏项)、窗口最小尺寸调整为 800x500、侧栏最小宽度 48px、控件最小尺寸限制减小以优化小窗口弹性布局 - `refactor`(2026-08-05 功能增强批次):导航扩展为 **8 分组**(数据流/日志/在线解析/文件解析/数据表格/协议编辑/协议发送/控件包);**页面弹出独立窗口**(DetachManager 模块,每页可弹出为 ElaWidget 独立窗口、可 8 窗并存、占位/关闭收回);**曲线页面板侧边标题条折叠**;表格热路径性能优化;面板最小宽度/滚动条修复。详见 `docs/PROJECT_STATUS.md` §2.5 - 后续升级方向待定,升级前先阅读 `docs/ARCHITECTURE.md` §8.0(修复状态)与 §9「升级扩展点指南」 ## 近期新增功能(2026-08) - **ElaWidgetTools(FluentUI)窗口重构(v0.17.0,refactor 分支)**:`ElaWindow` 成为唯一顶层窗口——ElaAppBar 替换自定义标题栏(置顶/主题切换按钮),ElaNavigationBar 替换左侧栏(5 节点,Auto 模式宽窄自适应 + 汉堡按钮),原菜单栏/状态栏/5 内容页移交 ElaWindow 托管;`BaseTool` 转为隐藏控制器;主题深浅切换与 Ela 双向联动(AppBar 按钮 ⇄ 菜单栏);QSS 只作用于内容页避免污染 Ela 控件 - **弹窗宿主修复(全部 5 个弹窗)**:根因 Qt 顶层子窗口可见性随父链传播——弹窗 `setParent(this)`(隐藏的 BaseTool)导致无法显示;全局宿主 `g_mainHost`(ElaWindow)+ 换宿主时继承项目 QSS,`dialogAnimation/dialogCommSet/dialogComplex/dialogCtrl_x/dialogProtocolSet` 五个弹窗文件全部打上补丁 - **死代码清理**:删除 `BaseTool::setSidebarCollapsed`、`titleBar/` 目录(ElaAppBar 取代)、QSS `#listWidgetSidebar`/`#btnSidebarToggle` 规则、`mainWindow/sidebarCollapsed` 键 - **深色/浅色主题切换**:菜单栏「主题」子菜单(深色/浅色单选),即时切换并记忆(`mainWindow/darkTheme`);两套 QSS(`style.qss`/`style_light.qss` + 标题栏两套);曲线图/对话框/表格/侧栏/标题栏颜色全部随主题,白色版图标资源配套(深色底可见) - **侧栏收起显示分组图标**:收起态列表仅显示黑白简约线段图标(数据流/日志/曲线/表格/协议,深色用白色版、浅色用黑色版),点击切换、选中高亮保留;收起状态记忆(`mainWindow/sidebarCollapsed`) - **标题栏 Windows 原生交互**:`WM_NCHITTEST` + `HTCAPTION` + `WS_THICKFRAME` 方案(参考微信/Chrome 等主流应用)——系统原生拖动(含拖到顶部最大化、Aero Snap 半透明预览动画、最大化拖离还原)、双击最大化、右键系统菜单、8px 边缘原生缩放;直角无边框(`WM_NCCALCSIZE` 隐藏系统边框,不透明窗口避免最大化渲染偏移);拖动 `move()` 非阻塞,串口/UDP/解析独立线程不受影响 - **界面状态记忆**:侧栏收起/展开、窗口几何(位置/尺寸/最大化)、主题、曲线页面板状态均持久化到 `save_data/Setting.ini`,重启自动恢复 - **曲线页三面板可调/可隐藏**:数据图像/图像解析项/选中数据改为 `QSplitter` 布局(拖动分隔条调节大小,窄屏自动垂直);右键菜单「图像设置」勾选控制面板显示/隐藏;按显示模式互斥(在线=选中数据、文件=图像解析项);面板最小宽度为总尺寸 1/3(拖动即时限制,拖到最小即停);尺寸与状态记忆(`page3/`) - **表格显示修复**:hover 仅背景高亮(消除文字重影/变形);行号列自绘 `ThemeVHeader`(颜色随主题,规避 Qt 表头文字颜色不可控);行号列空白区与左上角 corner 主题化;表格正文文字中灰(深色主题下不刺眼) - **界面控件优化**:按钮/输入框/下拉框/复选框/侧栏项尺寸缩小约 30%(20→14px、22→14px、18→12px、38→28px);标签页/菜单/分组框/工具提示内边距减小;窗口最小尺寸 1100x540→800x500;侧栏最小宽度 150→48px(可完全折叠为图标条);图表最小高度 400→200px;树形/表格/图表最小宽度 400→150/200px,优化小窗口弹性布局避免堆叠裁切 ## 近期新增功能(2026-08-05 功能增强批次,refactor 分支) - **导航扩展为 8 分组**:协议页 3 子页(协议编辑/协议发送/控件包)与曲线页 2 模式(在线解析/文件解析)各自独立为左侧导航分组;移除原「显示模式」切换(comboBoxPlotSel/右键菜单/互斥逻辑退役),两页常驻各自显示;`m_pages` 构造展开子页,原容器隐藏保留(`ui->` 指针不变) - **页面弹出独立窗口(DetachManager)**:每页顶部 36px 专属留白带内 ElaToolButton 图标按钮(默认半透明、hover 变清晰;双击留白带亦可)→ 页面弹出为 ElaWidget 独立窗口(ElaAppBar 标题/置顶/最小/最大/关闭/主题按钮),可 8 窗并存;关闭窗口/占位页按钮/导航点击收回或聚焦;弹出状态与几何记忆;主窗口关闭/退出 redockAll 兜底 - **曲线页面板侧边标题条折叠**:「选中数据」「图像解析项」面板侧边常驻 28px 竖排标题条(含折叠按钮),折叠=主体隐藏槽位收窄 28px,展开=恢复折叠前宽度;折叠态优先不被响应式撑宽;统一折叠入口(禁用 splitter 原生拖拽收起),修复与最小宽度守卫的冲突 - **面板宽度与表格显示**:「选中数据」面板最小宽度 2/5(拖动下限/展开兜底统一)、在线页默认 3:2;启动恢复过窄面板自动复查撑宽;表格横向滚动条 AsNeeded + 像素平滑滚动(防更新时间列裁切) - **表格热路径性能优化**:`funUpdata_anlyzeTableSlot/SelSlot` 不再每包 `delete+new QTableWidgetItem`,改预创建 item 原地 `setText()`(空指针补建 + 行号越界防护),高频收发下 UI 不卡顿