|
| 1 | +# [1019] 优化 New chat 按钮及浮球按钮 UI |
| 2 | + |
| 3 | +## 1 相关文档 |
| 4 | +- [dddd.md](dddd.md) - 任务文档模板 |
| 5 | +- [1018.md](1018.md) - 优化 LLM Chat 侧边栏开关按钮 UI |
| 6 | + |
| 7 | +## 2 任务相关的代码文件 |
| 8 | +- `src/Plugins/Qt/qt_chat_tab_widget.cpp` |
| 9 | +- `src/Plugins/Qt/qt_chat_tab_widget.hpp` |
| 10 | +- `TeXmacs/misc/images/llm-chat/addchat.svg` |
| 11 | +- `TeXmacs/misc/images/images.qrc` |
| 12 | + |
| 13 | +## 3 如何测试 |
| 14 | + |
| 15 | +### 3.1 确定性测试(单元测试) |
| 16 | +```bash |
| 17 | +xmake b qt_chat_tab_widget_test |
| 18 | +xmake r qt_chat_tab_widget_test |
| 19 | +``` |
| 20 | + |
| 21 | +### 3.2 非确定性测试(文档验证) |
| 22 | +```bash |
| 23 | +xmake b stem |
| 24 | +``` |
| 25 | +运行后打开 LLM Chat 标签页,验证: |
| 26 | + |
| 27 | +1. **New chat 按钮样式**: |
| 28 | + - 文本左侧有 addchat.svg 图标(18px) |
| 29 | + - 按钮居中显示在侧边栏 |
| 30 | + - 固定尺寸 140x36px,pill 形状(圆角 18px) |
| 31 | + - 无边框,白色背景,无 hover 背景色变化 |
| 32 | + - 有柔和阴影(blur=3, alpha=25, offset=1px) |
| 33 | + - 鼠标悬停时阴影加深(blur=6, alpha=50, offset=2px) |
| 34 | + |
| 35 | +2. **收起态浮球按钮**: |
| 36 | + - 点击收缩按钮后侧边栏隐藏 |
| 37 | + - 内容区左上角出现胶囊形容器,包含两个圆球按钮: |
| 38 | + - 左侧:展开按钮(sidebar.svg) |
| 39 | + - 右侧:新建聊天按钮(addchat.svg) |
| 40 | + - 胶囊容器有 4px 内边距和圆角背景 |
| 41 | + - 点击新建聊天按钮可创建新会话 |
| 42 | + |
| 43 | +3. **常量提取**:文件顶部所有魔法数字均已提取为 `constexpr` 常量 |
| 44 | + |
| 45 | +## 4 如何提交 |
| 46 | + |
| 47 | +提交前执行以下最少步骤: |
| 48 | + |
| 49 | +```bash |
| 50 | +xmake b qt_chat_tab_widget_test |
| 51 | +xmake r qt_chat_tab_widget_test |
| 52 | +xmake b stem |
| 53 | +``` |
| 54 | + |
| 55 | +## 5 What |
| 56 | + |
| 57 | +优化 LLM Chat 标签页的 New chat 按钮及收起态浮球按钮 UI。 |
| 58 | + |
| 59 | +1. **New chat 按钮视觉升级**: |
| 60 | + - 添加 addchat.svg 图标到文本左侧 |
| 61 | + - 固定尺寸 140x36px,pill 圆角(高度的一半) |
| 62 | + - 去掉边框和 hover 背景色 |
| 63 | + - 添加 `QGraphicsDropShadowEffect` 阴影效果 |
| 64 | + - 悬停时通过 eventFilter 动态加深阴影(替代背景色变化) |
| 65 | + - 按钮在侧边栏水平居中 |
| 66 | + |
| 67 | +2. **收起态添加浮球新建聊天按钮**: |
| 68 | + - 在内容区左上角添加圆球新建聊天按钮(与展开按钮并排) |
| 69 | + - 两个浮球按钮放入统一的胶囊形容器中 |
| 70 | + - 容器有灰色背景、4px 内边距、4px 按钮间距和圆角 |
| 71 | + |
| 72 | +3. **提取魔法数字为常量**: |
| 73 | + - 新增 17 个 `constexpr` 常量:按钮尺寸、阴影参数、间距、圆角等 |
| 74 | + - 删除 7 个不再使用的无用常量 |
| 75 | + - 所有 `DpiUtils::scaled()` 调用均使用命名常量 |
| 76 | + |
| 77 | +## 6 Why |
| 78 | + |
| 79 | +1. New chat 按钮原为纯文本且无样式,视觉上不够突出,缺乏现代感 |
| 80 | +2. 收起态只有展开按钮,用户需要展开侧边栏才能新建聊天,操作路径长 |
| 81 | +3. 代码中存在大量裸魔法数字,不利于维护和 DPI 适配 |
| 82 | + |
| 83 | +## 7 How |
| 84 | + |
| 85 | +### 7.1 New chat 按钮 |
| 86 | +在 `setup_left_sidebar()` 中: |
| 87 | +- `setIcon(QIcon(":llm-chat/addchat.svg"))` 添加图标 |
| 88 | +- `setFixedSize(QSize(140, 36))` 固定尺寸 |
| 89 | +- QSS 中 `border: none` 去掉边框,`border-radius: 18px` 形成 pill 形状 |
| 90 | +- 去掉 `QPushButton:hover` 背景色规则 |
| 91 | +- 创建 `QGraphicsDropShadowEffect`,设置 blur=3、alpha=25、offset_y=1 |
| 92 | +- `installEventFilter` 监听 `HoverEnter`/`HoverLeave`,动态调整阴影参数 |
| 93 | +- `normalLayout->addWidget(newChatButton_, 0, Qt::AlignHCenter)` 居中 |
| 94 | + |
| 95 | +### 7.2 浮球胶囊容器 |
| 96 | +在 `setup_right_content()` 中: |
| 97 | +- 创建 `QWidget` 作为容器,使用 `QHBoxLayout` 水平排列两个按钮 |
| 98 | +- 容器设置 `#e8e8e8` 背景色和圆角(按钮半径 + 内边距) |
| 99 | +- 两个按钮通过 `setup_floating_button()` 统一创建(透明背景,由容器提供底色) |
| 100 | +- 容器统一显示/隐藏,通过 `move()` 定位到内容区左上角 |
| 101 | + |
| 102 | +### 7.3 常量提取 |
| 103 | +新增常量示例: |
| 104 | +- `kNewChatButtonHeight = 36`, `kNewChatButtonWidth = 140` |
| 105 | +- `kNewChatShadowBlur = 3`, `kNewChatShadowAlpha = 25` |
| 106 | +- `kNewChatHoverShadowBlur = 6`, `kNewChatHoverShadowAlpha = 50` |
| 107 | +- `kSendButtonSize = 36`, `kSendButtonRadius = 18` |
| 108 | +- `kConversationBtnRadius = 6`, `kModelLabelMinHeight = 20` |
| 109 | +- 等 17 个常量 |
| 110 | + |
| 111 | +删除无用常量: |
| 112 | +- `kSendButtonPadY`, `kSendButtonPadX`, `kSendButtonFontPx` |
| 113 | +- `kContentMarginX`, `kTopPanelMaxWidth`, `kInputFrameBorder` |
| 114 | +- `kFloatingNewChatBtnMarginX` |
0 commit comments