From 7317588b6184eebaf063aa7bd177c18bd77a235d Mon Sep 17 00:00:00 2001 From: xiepengfei Date: Tue, 21 Apr 2026 11:13:50 +0800 Subject: [PATCH] fix(browser): intercept PageDown/PageUp to snap to page boundary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Override keyPressEvent in SheetBrowser to handle PageDown/PageUp by jumping to exact page boundaries instead of pixel-based scrolling. 重写SheetBrowser的keyPressEvent,PageDown/PageUp直接跳转到 精确页面边界,避免像素滚动导致的累积偏移。 Log: 修复PageDown翻页时页面边界逐渐偏移的问题 PMS: BUG-353721 Influence: 所有缩放模式下PageDown/PageUp均精确跳转到上/下一页,不再有累积偏移。 --- reader/browser/SheetBrowser.cpp | 16 ++++++++++++++++ reader/browser/SheetBrowser.h | 7 +++++++ 2 files changed, 23 insertions(+) diff --git a/reader/browser/SheetBrowser.cpp b/reader/browser/SheetBrowser.cpp index 487c8e3e..2b998592 100644 --- a/reader/browser/SheetBrowser.cpp +++ b/reader/browser/SheetBrowser.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -752,6 +753,21 @@ void SheetBrowser::jumpToHighLight(deepin_reader::Annotation *annotation, const qCDebug(appLog) << "SheetBrowser::jumpToHighLight() - Jump to high light completed"; } +void SheetBrowser::keyPressEvent(QKeyEvent *event) +{ + if (m_sheet) { + if (event->key() == Qt::Key_PageDown && !event->isAutoRepeat()) { + m_sheet->jumpToNextPage(); + return; + } + if (event->key() == Qt::Key_PageUp && !event->isAutoRepeat()) { + m_sheet->jumpToPrevPage(); + return; + } + } + DGraphicsView::keyPressEvent(event); +} + void SheetBrowser::wheelEvent(QWheelEvent *event) { // qCDebug(appLog) << "SheetBrowser::wheelEvent() - Starting wheel event"; diff --git a/reader/browser/SheetBrowser.h b/reader/browser/SheetBrowser.h index 91578206..81af98f6 100644 --- a/reader/browser/SheetBrowser.h +++ b/reader/browser/SheetBrowser.h @@ -408,6 +408,13 @@ class SheetBrowser : public Dtk::Widget::DGraphicsView */ void mouseReleaseEvent(QMouseEvent *event) override; + /** + * @brief keyPressEvent + * 键盘按键事件,适合高度模式下拦截PageDown/PageUp实现精确翻页 + * @param event + */ + void keyPressEvent(QKeyEvent *event) override; + /** * @brief focusOutEvent * 失去焦点处理