Files
cmshoppe/docs/tasks/T-652.md
T

3.6 KiB

id, title, phase, deps, status, created
id title phase deps status created
T-652 商品套图生成设置下拉框防滚轮误改 7
TODO 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 效果图;
  • 运行:
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:根据生成设置下拉框滚轮误改问题创建任务。待实现。