--- id: T-697 title: 移除主窗口应用内重复标题 phase: 7 deps: [T-696] status: DONE created: 2026-07-23 --- ## 问题 / 背景 主窗口当前同时使用 `setWindowTitle(display_name())` 设置 Windows 原生标题栏,并在六个 Tabs 上方通过 `QLabel(display_name())` 再显示一次相同应用名称。两个标题上下相邻,信息语义完全重复,占用桌面工作台的垂直空间,也削弱右侧会员状态的层级。 Windows 原生标题必须保留,用于窗口识别、任务栏/Alt+Tab 展示和系统窗口操作。应用内顶部区域还需要承载 T-696 的会员账号、套餐和有效期,因此不能整体删除,只应改为轻量会员状态栏。 ## 方案 - 保留 `MainWindow.setWindowTitle(display_name())` 和现有窗口图标,不修改 Windows 原生标题栏或窗口拖动行为。 - 删除应用内 `_header_title_label`、`appHeaderTitle` 对象和对应字体样式,不用其他品牌文字、图标或占位标签替代。 - 保留 `appHeader` 容器与右侧 `subscriptionStatusLabel`;会员有效、观察中、异常和验证中状态逻辑不变。 - 状态栏继续右对齐,并适当收紧上下边距;不设置固定高度,让中文长套餐、系统字体放大和高 DPI 下仍可自然撑开。 - 这是单个标签和间距的局部调整,不改变导航模型、业务流程或交互状态,因此不新增 HTML/SVG 原型。 - 更新 `docs/routes.md`,明确顶部区域只承载会员状态,应用名称以 Windows 原生标题栏为准。 ## 验收要点 - Windows 原生标题仍显示当前 `display_name()`,任务栏和窗口标题行为不变。 - Tabs 上方不再出现第二个“蝦皮圈優化助手”应用名称。 - 顶部会员账号、套餐、有效期和观察状态仍正常显示并保持右对齐。 - 顶部区域高度较原布局收紧,但在 Qt 字体/DPI 自适应时不会裁切文字。 - 订阅观察模式、设置保存后重查、六个 Tab 和状态栏功能不受影响。 - 自动验证: - 主窗口标题与顶部会员状态定向 GUI 测试 - `py -3.10 -m unittest discover -s tests` - `py -3.10 -m ruff check app tests main.py` - `py -3.10 -m compileall app main.py` - `git diff --check` ## 边界(不改什么) - 不自定义、隐藏或替换 Windows 原生标题栏。 - 不移动会员状态到系统标题栏、TabBar 或底部状态栏。 - 不修改 T-696 订阅查询、观察/强制开关、接口或门禁逻辑。 - 不修改六个业务 Tab、主题色、按钮、表格、CDP 或蝦皮业务流程。 ## 执行记录 - 2026-07-23:保留 `MainWindow.setWindowTitle(display_name())` 与窗口图标,移除应用内 `_header_title_label`、`appHeaderTitle` 和对应字体样式,Tabs 上方不再重复显示应用名称。 - `appHeader` 改为只承载右对齐会员状态的轻量区域,增加“会员状态栏”无障碍名称;上下边距从 `8/4` 收紧为 `4/2`,不设置固定高度,保留字体和 DPI 自适应。 - 更新路由文档和 GUI 回归测试,覆盖系统窗口标题、重复标题不存在、会员状态标签保留、状态栏对象语义与边距。 - 验证通过:主窗口定向 GUI 测试 3 项、`py -3.10 -m unittest discover -s tests`(682 项)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`git diff --check`。