Skip to content

[0913] 版本弹窗长文本自动换行并自适应高度 - #4349

Merged
PinkMagicFly merged 2 commits into
mainfrom
pigmagicfly/0913/version-dialog-wrap
Aug 17, 2026
Merged

[0913] 版本弹窗长文本自动换行并自适应高度#4349
PinkMagicFly merged 2 commits into
mainfrom
pigmagicfly/0913/version-dialog-wrap

Conversation

@PinkMagicFly

Copy link
Copy Markdown
Contributor

What

  1. 排查「帮助 -> 版本」弹窗内容显示英文未翻译的问题(结论:当前 main 翻译链路完好,无需改代码,见下)。
  2. 版本弹窗在保留原有按句号(\n)换行的基础上,单行文字超过弹窗宽度时自动换行,弹窗高度随内容自适应。

Why

翻译问题排查结论:用户看到的英文弹窗来自 [0414](0b26a8c05,2026/06/05)到 [2080](fc8c1f398,2026/08/03)之间的构建:0414/0415 引入「联网自动获取最新版本号」后,消息改为英文模板先 replace 代入版本号、再交给旧 widget 弹窗 show-message,而旧弹窗的自动翻译(make-menu-texttranslate)作用在代入版本号之后的字符串上,撞不上字典 key(key 含 %1/%2/%3 占位符),整段回退英文;0414 之前是硬编码中文。[2080] QML 重构已把 translate 挪到 replace 之前(先译模板再代入版本号),问题随之修复。本 PR 在最新 main 上实测确认弹窗标题、正文、按钮均为中文。

自动换行:Version.qml 消息行原为 wrapMode: Text.NoWrap,长行(如英文提示)会超出 560 宽弹窗被裁掉。

How

  1. Version.qml 消息行 wrapMode 改为 Text.Wrap(优先词边界折行,超长词/URL 断开;中文无空格也可在字符间断开),\n 分行结构不变。
  2. 弹窗高度自适应:implicitHeight 绑定为 max(220 * scaleFactor, body.implicitHeight + 2 * Theme.margin)。文本宽度绑定到新增的 contentW(定宽弹窗的正文内容宽 560 * scaleFactor - 2 * implicitMargins)而非实际父宽——C++ 在 show 之前就要读 implicitHeight 定高,此刻布局宽度尚未就位(隐藏状态下 QQuickWidget 不向 root 同步尺寸),绑实际宽度会量出错误的换行结果。
  3. run_qml_dialog 新增 autofit_height 参数:true 时走新增的 lock_autofit_height——先按逻辑宽锁定视图宽度,再读根对象 implicitHeight(QML 像素,已含 scaleFactor,故不再过 DpiUtils::scaled)锁定高度,logic_h 仅作回退。cpp_version_dialogtrue
  4. ai-docs/qml/qml-dialog.html 的 Version 面板 legend 同步补换行/自适应说明。

Tests

  • gf fmt --changed-since=main:0 实际改动
  • xmake b qml_load_test && xmake r qml_load_test:12 passed / 0 failed(新增 test_version_long_line_wraps:400 字符单行 → 换行后行高成倍、implicitHeight 超过最小高度 220)
  • xmake b stem && xmake r 2080:2 correct / 0 failed
  • 已基于最新 origin/main(7bba28489)rebase,rebase 后重跑上述验证通过

手动 GUI 验证(已完成,截屏确认)

  • 中文环境真实流程(帮助 -> 版本,联网取版本号):弹窗 560x228,标题「版本」、正文「您正在使用 v2026.3.1-rc.2。Mogan STEM 的最新稳定版是…」、按钮「确认」全中文。
  • 英文长消息(3 个 \n 分段含长行):长行按词边界折行,弹窗 560x220 撑高到 560x284。
  • 单句超长英文(约 300 字符无手动换行):折成 4 行,撑高到 560x244。
  • 单句超长中文(约 160 字无手动换行):中文字符间断行折成 4 行,撑高到 560x244;较短中文长句折 3 行时保持最小高度 220,排版不挤。

@Yuki-Nagori Yuki-Nagori left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@PinkMagicFly
PinkMagicFly merged commit fab8d77 into main Aug 17, 2026
6 of 7 checks passed
@PinkMagicFly
PinkMagicFly deleted the pigmagicfly/0913/version-dialog-wrap branch August 17, 2026 06:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants