2026-07-17 11:17:45 +08:00
|
|
|
|
---
|
|
|
|
|
|
id: T-652
|
|
|
|
|
|
title: 商品套图生成设置下拉框防滚轮误改
|
|
|
|
|
|
phase: 7
|
|
|
|
|
|
deps: []
|
2026-07-17 12:05:57 +08:00
|
|
|
|
status: DONE
|
2026-07-17 11:17:45 +08:00
|
|
|
|
created: 2026-07-17
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 问题 / 背景
|
|
|
|
|
|
|
|
|
|
|
|
⑥「商品套图」左侧生成设置的「平台、站点、语言、比例」目前使用普通 `QComboBox`。鼠标指针停在下拉框上时,用户滚动滚轮想浏览配置区页面,会触发 Qt 默认行为并直接修改当前选项,可能导致平台、输出语言或图片比例在未察觉时变化。
|
|
|
|
|
|
|
|
|
|
|
|
这些参数会影响套图提示词和生图请求,属于影响生成结果与成本的设置。滚轮悬停改值不符合用户的显式操作预期。
|
|
|
|
|
|
|
|
|
|
|
|
## 方案
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 只限制⑥生成设置的闭合下拉框滚轮行为
|
|
|
|
|
|
|
|
|
|
|
|
- 仅处理 `ProductSuiteTab` 的平台、站点、语言、比例四个生成设置下拉框;不全局修改所有 `QComboBox`,不影响账号选择、历史店铺筛选、设置页模型别名等其他业务控件;
|
|
|
|
|
|
- 下拉框处于闭合状态时,忽略鼠标滚轮导致的选项切换,并将滚动事件交给外层配置滚动区,使页面继续自然上下滚动;
|
|
|
|
|
|
- 下拉列表已展开时,滚轮只用于浏览下拉选项列表,不能在未点击/未明确键盘确认的情况下静默提交新的当前值;
|
|
|
|
|
|
- 保留鼠标点击选择、`Alt+↓` 打开、方向键/回车等明确键盘操作;不得通过 `Qt.NoFocus` 粗暴禁用焦点,避免破坏键盘操作和无障碍能力;
|
|
|
|
|
|
- 使用局部 `QComboBox` 子类或只安装在这四个控件上的事件过滤器,避免散落的重复条件判断。
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 保持设置持久化和生成语义
|
|
|
|
|
|
|
|
|
|
|
|
- 滚轮被忽略时不得触发 `_on_settings_changed()`、不写项目设置、不改变生成数量、提示词预览、历史或当前任务状态;
|
|
|
|
|
|
- 用户通过鼠标/键盘明确选中后,沿用现有设置归一化、项目保存和新任务最近设置记忆逻辑;
|
|
|
|
|
|
- 不改变平台、站点、语言、比例的可选值、默认值、布局、提示词变量或 cmhub 请求参数。
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 测试与文档
|
|
|
|
|
|
|
|
|
|
|
|
- `tests/test_product_suite_gui.py`:向四个闭合下拉框发送 wheel event,断言当前值不变且外层 `suiteConfigScroll` 可继续滚动;鼠标选择和键盘选择仍会改变值并按原逻辑持久化;
|
|
|
|
|
|
- 覆盖下拉展开时滚轮仅浏览候选项、不因悬停静默提交的行为;
|
|
|
|
|
|
- 同步更新 `docs/routes.md` 的⑥生成设置交互说明;无需新增 SVG 效果图;
|
|
|
|
|
|
- 运行:
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
py -3.10 -m unittest tests.test_product_suite_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
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 验收要点
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] 鼠标悬停在平台、站点、语言、比例任一下拉框上滚动页面时,当前选项不改变。
|
|
|
|
|
|
- [ ] 外层配置区仍可正常滚动,不出现滚轮失效或页面卡住。
|
|
|
|
|
|
- [ ] 展开下拉后可正常滚动浏览选项,鼠标点击或明确键盘确认后才改变设置。
|
|
|
|
|
|
- [ ] 鼠标点击、键盘选择、项目保存和最近设置记忆不回归。
|
|
|
|
|
|
- [ ] 账号选择、历史筛选、⑤设置和其他 Tab 的下拉框滚轮行为不受影响。
|
|
|
|
|
|
- [ ] 不影响套图生成、AI帮写、cmhub、SQLite、历史、导出、Shopee CDP、采集或更新蝦皮。
|
|
|
|
|
|
|
|
|
|
|
|
## 边界(不改什么)
|
|
|
|
|
|
|
|
|
|
|
|
- 不全局重写 Qt 滚轮事件,不新增全局 event filter。
|
|
|
|
|
|
- 不修改平台、站点、语言、比例的选项、默认值、提示词结构、生成数量、模型选择或价格逻辑。
|
|
|
|
|
|
- 不修改其他 Tab 的下拉框、快捷键、鼠标选择、账号管理或设置模块。
|
|
|
|
|
|
|
|
|
|
|
|
## 执行记录
|
|
|
|
|
|
|
|
|
|
|
|
- 2026-07-17:根据生成设置下拉框滚轮误改问题创建任务。待实现。
|
2026-07-17 12:05:57 +08:00
|
|
|
|
- 2026-07-17:开始实现仅限商品套图四个生成设置下拉框的防滚轮误改交互。
|
|
|
|
|
|
- 2026-07-17:已新增局部 `SuiteSettingsComboBox`。平台、站点、语言、比例在闭合时把滚轮转交给 `suiteConfigScroll`,展开时转交候选列表;鼠标和键盘选择保持不变。验证:`py -3.10 -m unittest discover -s tests`(578 项通过)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`git diff --check` 通过。
|