Skip to content

feat(shortcuts): add arrow key scrolling support for document viewer#267

Merged
deepin-bot[bot] merged 1 commit intolinuxdeepin:masterfrom
add-uos:task-40655-add-arrow-key-scrolling
Apr 28, 2026
Merged

feat(shortcuts): add arrow key scrolling support for document viewer#267
deepin-bot[bot] merged 1 commit intolinuxdeepin:masterfrom
add-uos:task-40655-add-arrow-key-scrolling

Conversation

@add-uos
Copy link
Copy Markdown
Contributor

@add-uos add-uos commented Apr 28, 2026

Add Up/Down arrow key shortcuts for smooth line-by-line scrolling.

添加上下方向键快捷键,支持逐行平滑滚动。

Log: 添加方向键滚动功能
PMS: TASK-40655
Influence: 用户可以使用上下方向键进行文档滚动,提升阅读体验。

Add Up/Down arrow key shortcuts for smooth line-by-line scrolling.

添加上下方向键快捷键,支持逐行平滑滚动。

Log: 添加方向键滚动功能
PMS: TASK-40655
Influence: 用户可以使用上下方向键进行文档滚动,提升阅读体验。
@deepin-ci-robot
Copy link
Copy Markdown

deepin pr auto review

代码审查报告

1. 语法逻辑审查

1.1 Global.h 文件

  • 代码添加了新的全局常量 key_scroll_step_pixels,定义了滚动步长为20像素
  • 语法正确,常量定义符合C++规范
  • 命名清晰,使用下划线分隔的小写字母,符合项目命名规范

1.2 SheetBrowser.cpp 文件

  • keyPressEvent 方法中添加了上下键的处理逻辑
  • 语法正确,正确使用了 event->accept() 来接受事件
  • 逻辑合理,通过修改滚动条的值来实现滚动功能

1.3 CentralDocPage.cpp 文件

  • handleShortcut 方法中添加了上下键的处理逻辑
  • 语法正确,正确检查了 sheet->getSheetBrowser() 是否存在
  • 逻辑合理,与 SheetBrowser.cpp 中的实现保持一致

1.4 ShortCutShow.cpp 文件

  • 添加了上下键快捷键的显示文本
  • 语法正确,使用了 tr() 函数进行国际化处理

2. 代码质量审查

2.1 优点

  1. 代码结构清晰,逻辑简单明了
  2. 事件处理正确,使用了 event->accept() 防止事件继续传递
  3. 添加了适当的注释,解释了代码功能
  4. 使用了全局常量定义滚动步长,便于统一管理

2.2 改进建议

  1. 魔法数字问题:虽然使用了全局常量 key_scroll_step_pixels,但20像素的值是硬编码的,建议考虑根据不同屏幕DPI动态调整滚动步长,以适应高分辨率屏幕

    // 建议改为根据屏幕DPI动态计算
    const int key_scroll_step_pixels = qApp->primaryScreen()->logicalDotsPerInch() / 72 * 20;
  2. 代码重复:上下键的处理逻辑在两个地方(SheetBrowser.cpp 和 CentralDocPage.cpp)重复实现,建议考虑统一到一个地方处理

  3. 边界检查:虽然 verticalScrollBar()->setValue() 会自动处理超出范围的值,但显式添加边界检查会使代码更健壮

3. 代码性能审查

  1. 当前实现性能良好,没有明显的性能问题
  2. verticalScrollBar()->setValue() 调用是Qt框架提供的优化方法,性能开销很小
  3. 建议考虑在连续按键时添加防抖动处理,避免滚动过快

4. 代码安全审查

  1. 代码中正确检查了 sheet->getSheetBrowser() 是否为空,避免了空指针解引用
  2. 没有发现明显的安全漏洞
  3. 建议添加对滚动步长的范围检查,防止未来修改时设置不合理的值

5. 其他建议

  1. 国际化处理:已正确添加了多语言翻译文件,支持多种语言
  2. 版权声明更新:已正确更新了版权年份范围(2023-2026)
  3. .gitignore更新:添加了 obj-x86_64-linux-gnu/ 到忽略列表,符合项目构建需求

6. 总体评价

整体代码质量良好,实现了上下键按固定像素滚动的功能。代码结构清晰,逻辑正确,没有发现严重问题。建议考虑上述改进点,特别是关于DPI自适应的改进,以提高用户体验。

@github-actions
Copy link
Copy Markdown

  • 敏感词检查失败, 检测到1个文件存在敏感词
详情
{
    "reader/app/Global.h": [
        {
            "line": "const QString key_up               = \"Up\";",
            "line_number": 106,
            "rule": "S106",
            "reason": "Var naming | 20293a700f"
        },
        {
            "line": "const QString key_down             = \"Down\";",
            "line_number": 107,
            "rule": "S106",
            "reason": "Var naming | 21f2799b08"
        },
        {
            "line": "const QString key_left             = \"Left\";",
            "line_number": 108,
            "rule": "S106",
            "reason": "Var naming | ebc87ca254"
        },
        {
            "line": "const QString key_right            = \"Right\";",
            "line_number": 109,
            "rule": "S106",
            "reason": "Var naming | ce51450b6e"
        },
        {
            "line": "const QString key_space            = \"Space\";           // 空格用于停止启动幻灯片播放",
            "line_number": 110,
            "rule": "S106",
            "reason": "Var naming | 19eddccbbe"
        },
        {
            "line": "const QString key_pgUp             = \"PgUp\";            // 上一页",
            "line_number": 111,
            "rule": "S106",
            "reason": "Var naming | 9c0713cb36"
        },
        {
            "line": "const QString key_pgDown           = \"PgDown\";          // 下一页",
            "line_number": 112,
            "rule": "S106",
            "reason": "Var naming | 73cb3b091d"
        },
        {
            "line": "const QString key_delete           = \"Del\";             // 删除",
            "line_number": 113,
            "rule": "S106",
            "reason": "Var naming | 8309604c6a"
        },
        {
            "line": "const QString key_esc              = \"Esc\";             // 退出全屏\退出放映\退出放大镜",
            "line_number": 114,
            "rule": "S106",
            "reason": "Var naming | 7dc55b084c"
        },
        {
            "line": "const QString key_f1               = \"F1\";              // 帮助",
            "line_number": 115,
            "rule": "S106",
            "reason": "Var naming | cfc950dca5"
        },
        {
            "line": "const QString key_f5               = \"F5\";              // 播放幻灯片",
            "line_number": 116,
            "rule": "S106",
            "reason": "Var naming | 8ce983fd5e"
        },
        {
            "line": "const QString key_f11              = \"F11\";             // 全屏",
            "line_number": 117,
            "rule": "S106",
            "reason": "Var naming | a2272d0c5c"
        },
        {
            "line": "const QString key_ctrl_1           = \"Ctrl+1\";          // 适合页面状态",
            "line_number": 118,
            "rule": "S106",
            "reason": "Var naming | 298036410c"
        },
        {
            "line": "const QString key_ctrl_2           = \"Ctrl+2\";          // 适合高度",
            "line_number": 119,
            "rule": "S106",
            "reason": "Var naming | bb89826f32"
        },
        {
            "line": "const QString key_ctrl_3           = \"Ctrl+3\";          // 适合宽度",
            "line_number": 120,
            "rule": "S106",
            "reason": "Var naming | 0ec78a6f33"
        },
        {
            "line": "const QString key_ctrl_d           = \"Ctrl+D\";          // 添加书签",
            "line_number": 121,
            "rule": "S106",
            "reason": "Var naming | 55b590dac6"
        },
        {
            "line": "const QString key_ctrl_f           = \"Ctrl+F\";          // 搜索",
            "line_number": 122,
            "rule": "S106",
            "reason": "Var naming | c37c14ca83"
        },
        {
            "line": "const QString key_ctrl_o           = \"Ctrl+O\";          // 打开",
            "line_number": 123,
            "rule": "S106",
            "reason": "Var naming | 71c792ad13"
        },
        {
            "line": "const QString key_ctrl_e           = \"Ctrl+E\";          // 导出",
            "line_number": 124,
            "rule": "S106",
            "reason": "Var naming | f21c130ba1"
        },
        {
            "line": "const QString key_ctrl_p           = \"Ctrl+P\";          // 打印",
            "line_number": 125,
            "rule": "S106",
            "reason": "Var naming | c6591979a9"
        },
        {
            "line": "const QString key_ctrl_s           = \"Ctrl+S\";          // 保存",
            "line_number": 126,
            "rule": "S106",
            "reason": "Var naming | 7c224c84ee"
        },
        {
            "line": "const QString key_ctrl_m           = \"Ctrl+M\";          // 打开目标缩略图",
            "line_number": 127,
            "rule": "S106",
            "reason": "Var naming | f723ab894f"
        },
        {
            "line": "const QString key_ctrl_r           = \"Ctrl+R\";          // 左旋转",
            "line_number": 128,
            "rule": "S106",
            "reason": "Var naming | d3f2cb7d2b"
        },
        {
            "line": "const QString key_ctrl_c           = \"Ctrl+C\";",
            "line_number": 129,
            "rule": "S106",
            "reason": "Var naming | 7191938108"
        },
        {
            "line": "const QString key_ctrl_x           = \"Ctrl+X\";",
            "line_number": 130,
            "rule": "S106",
            "reason": "Var naming | a6dd4ba68a"
        },
        {
            "line": "const QString key_ctrl_v           = \"Ctrl+V\";",
            "line_number": 131,
            "rule": "S106",
            "reason": "Var naming | 241a1788e0"
        },
        {
            "line": "const QString key_ctrl_z           = \"Ctrl+Z\";",
            "line_number": 132,
            "rule": "S106",
            "reason": "Var naming | f78601e55e"
        },
        {
            "line": "const QString key_ctrl_a           = \"Ctrl+A\";",
            "line_number": 133,
            "rule": "S106",
            "reason": "Var naming | 4774d3cc37"
        },
        {
            "line": "const QString key_ctrl_equal       = \"Ctrl+=\";          // 放大",
            "line_number": 134,
            "rule": "S106",
            "reason": "Var naming | 51a1643479"
        },
        {
            "line": "const QString key_ctrl_smaller     = \"Ctrl+-\";          // 缩小",
            "line_number": 135,
            "rule": "S106",
            "reason": "Var naming | 2c983162a1"
        },
        {
            "line": "const QString key_alt_1            = \"Alt+1\";           // 选择工具",
            "line_number": 136,
            "rule": "S106",
            "reason": "Var naming | a0378f280b"
        },
        {
            "line": "const QString key_alt_2            = \"Alt+2\";           // 手型工具",
            "line_number": 137,
            "rule": "S106",
            "reason": "Var naming | 57ced1cd00"
        },
        {
            "line": "const QString key_alt_a            = \"Alt+A\";           // 添加注释",
            "line_number": 138,
            "rule": "S106",
            "reason": "Var naming | 3c60d1d86d"
        },
        {
            "line": "const QString key_alt_h            = \"Alt+H\";           // 添加高亮",
            "line_number": 139,
            "rule": "S106",
            "reason": "Var naming | 1878434593"
        },
        {
            "line": "const QString key_alt_z            = \"Alt+Z\";           // 放大镜",
            "line_number": 140,
            "rule": "S106",
            "reason": "Var naming | e48b2efc36"
        },
        {
            "line": "const QString key_alt_f4           = \"Alt+F4\";          // 退出应用程序",
            "line_number": 141,
            "rule": "S106",
            "reason": "Var naming | d225da4d6e"
        },
        {
            "line": "const QString key_alt_harger       = \"Ctrl++\";          // 放大",
            "line_number": 142,
            "rule": "S106",
            "reason": "Var naming | 9e19ceeedd"
        },
        {
            "line": "const QString key_ctrl_shift_r     = \"Ctrl+Shift+R\";    // 右旋转",
            "line_number": 143,
            "rule": "S106",
            "reason": "Var naming | 6be0727d79"
        },
        {
            "line": "const QString key_ctrl_shift_s     = \"Ctrl+Shift+S\";    // 另存为",
            "line_number": 144,
            "rule": "S106",
            "reason": "Var naming | 8f81237f85"
        },
        {
            "line": "const QString key_ctrl_shift_slash = \"Ctrl+Shift+/\";",
            "line_number": 145,
            "rule": "S106",
            "reason": "Var naming | bad1d49dcc"
        },
        {
            "line": "const QString key_ctrl_home        = \"Ctrl+Home\";       //第一页",
            "line_number": 146,
            "rule": "S106",
            "reason": "Var naming | bff733899f"
        },
        {
            "line": "const QString key_ctrl_end         = \"Ctrl+End\";        //最后一页",
            "line_number": 147,
            "rule": "S106",
            "reason": "Var naming | 7cbe7a3f8b"
        }
    ]
}

@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: add-uos, lzwind

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@add-uos
Copy link
Copy Markdown
Contributor Author

add-uos commented Apr 28, 2026

/forcemerge

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Apr 28, 2026

This pr force merged! (status: unstable)

@deepin-bot deepin-bot Bot merged commit db40c1e into linuxdeepin:master Apr 28, 2026
10 of 11 checks passed
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.

3 participants