diff --git a/reader/uiframe/Central.cpp b/reader/uiframe/Central.cpp index fd528236a..946f13777 100644 --- a/reader/uiframe/Central.cpp +++ b/reader/uiframe/Central.cpp @@ -45,14 +45,13 @@ Central::Central(QWidget *parent) keyList.append(QKeySequence::Print); keyList.append(QKeySequence::Save); keyList.append(QKeySequence::Copy); - // 屏蔽右侧区域的切页快捷键,使用默认的滚动效果 - // when using slide mode, left & right keys are needed. modify by lz,at 2022.4.18 - keyList.append(QKeySequence(Qt::Key_Left)); - keyList.append(QKeySequence(Qt::Key_Right)); - - keyList.append(QKeySequence(Qt::Key_Up)); - keyList.append(QKeySequence(Qt::Key_Down)); - keyList.append(QKeySequence(Qt::Key_Space)); + //使用下面5个快捷键会屏蔽主界面对应的功能,故注释 + //keyList.append(QKeySequence(Qt::Key_Left)); + //keyList.append(QKeySequence(Qt::Key_Right)); + + //keyList.append(QKeySequence(Qt::Key_Up)); + //keyList.append(QKeySequence(Qt::Key_Down)); + //keyList.append(QKeySequence(Qt::Key_Space)); keyList.append(QKeySequence(Qt::Key_Escape)); keyList.append(QKeySequence(Qt::Key_F5)); keyList.append(QKeySequence(Qt::Key_F11)); diff --git a/reader/uiframe/CentralDocPage.cpp b/reader/uiframe/CentralDocPage.cpp index a8fea647e..d5631c00c 100644 --- a/reader/uiframe/CentralDocPage.cpp +++ b/reader/uiframe/CentralDocPage.cpp @@ -611,7 +611,6 @@ void CentralDocPage::handleShortcut(const QString &s) } if (m_slideWidget) { - m_slideWidget->handleKeyPressEvent(s); return; } diff --git a/reader/widgets/SlideWidget.cpp b/reader/widgets/SlideWidget.cpp index 4f67c686f..265ce9dcd 100644 --- a/reader/widgets/SlideWidget.cpp +++ b/reader/widgets/SlideWidget.cpp @@ -9,6 +9,7 @@ #include "SlidePlayWidget.h" #include "Application.h" #include "ReaderImageThreadPoolManager.h" +#include "Utils.h" #include #include @@ -26,6 +27,7 @@ SlideWidget::SlideWidget(DocSheet *docsheet) initControl(); initImageControl(); show(); + QTimer::singleShot(0, this, [this](){this->setFocus();}); } SlideWidget::~SlideWidget() @@ -345,6 +347,14 @@ void SlideWidget::handleKeyPressEvent(const QString &sKey) } } +void SlideWidget::keyPressEvent(QKeyEvent *event) +{ + QString key = Utils::getKeyshortcut(event); + handleKeyPressEvent(key); + + DWidget::keyPressEvent(event); +} + void SlideWidget::onFetchImage(int index) { const QPixmap &pix = ReaderImageThreadPoolManager::getInstance()->getImageForDocSheet(m_docSheet, index); diff --git a/reader/widgets/SlideWidget.h b/reader/widgets/SlideWidget.h index b3fc73ce8..cc283ff3e 100644 --- a/reader/widgets/SlideWidget.h +++ b/reader/widgets/SlideWidget.h @@ -36,13 +36,6 @@ public slots: */ void setWidgetState(bool full); - /** - * @brief handleKeyPressEvent - * 按键处理事件 - * @param sKey - */ - void handleKeyPressEvent(const QString &sKey); - /** * @brief onImageAniFinished * 单页幻灯片播放结束 @@ -56,6 +49,13 @@ public slots: */ void initControl(); + /** + * @brief handleKeyPressEvent + * 按键处理事件 + * @param sKey + */ + void handleKeyPressEvent(const QString &sKey); + /** * @brief initImageControl * 初始化图片数据 @@ -160,6 +160,8 @@ private slots: void wheelEvent(QWheelEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; + private: int m_curPageIndex = 0; bool m_canRestart = false; diff --git a/tests/uiframe/ut_centraldocpage.cpp b/tests/uiframe/ut_centraldocpage.cpp index 6e7c4f99e..e1c056527 100644 --- a/tests/uiframe/ut_centraldocpage.cpp +++ b/tests/uiframe/ut_centraldocpage.cpp @@ -1092,7 +1092,7 @@ TEST_F(TestCentralDocPage, UT_CentralDocPage_handleShortcut_004) { Stub s; s.set(ADDR(ReaderImageThreadPoolManager, addgetDocImageTask), addgetDocImageTask_stub); - s.set(ADDR(SlideWidget, handleKeyPressEvent), handleKeyPressEvent_stub); + s.set(ADDR(CentralDocPage, openSlide), openSlide_stub); QString strPath = UTSOURCEDIR; strPath += "/files/normal.pdf"; @@ -1103,7 +1103,7 @@ TEST_F(TestCentralDocPage, UT_CentralDocPage_handleShortcut_004) g_funcName.clear(); m_tester->handleShortcut(Dr::key_f5); - EXPECT_TRUE(g_funcName == "handleKeyPressEvent_stub"); + EXPECT_TRUE(g_funcName != "openSlide_stub"); delete sheet; delete slide; @@ -1117,7 +1117,6 @@ TEST_F(TestCentralDocPage, UT_CentralDocPage_handleShortcut_005) s.set(ADDR(CentralDocPage, handleBlockShutdown), handleBlockShutdown_stub); s.set(ADDR(CentralDocPage, openSlide), openSlide_stub); s.set(ADDR(CentralDocPage, openMagnifer), openMagnifer_stub); - s.set(ADDR(SlideWidget, handleKeyPressEvent), handleKeyPressEvent_stub); g_funcName.clear(); m_tester->handleShortcut(Dr::key_ctrl_s); diff --git a/tests/widgets/ut_slidewidget.cpp b/tests/widgets/ut_slidewidget.cpp index f17415e5c..7c8ec66a5 100644 --- a/tests/widgets/ut_slidewidget.cpp +++ b/tests/widgets/ut_slidewidget.cpp @@ -19,6 +19,7 @@ #include #include #include +#include namespace { void ReaderImageThreadPoolManager_addgetDocImageTask_stub(const ReaderImageParam_t &); @@ -275,11 +276,14 @@ TEST_F(TestSlideWidget, testhandleKeyPressEvent) stub.set(ADDR(SlideWidget, onPreBtnClicked), onPreBtnClicked_stub); stub.set(ADDR(SlideWidget, onNextBtnClicked), onNextBtnClicked_stub); - m_tester->handleKeyPressEvent(Dr::key_space); + QKeyEvent spaceEvent(QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier); + m_tester->keyPressEvent(&spaceEvent); EXPECT_TRUE(g_funcname == "setPlayStatus_stub"); - m_tester->handleKeyPressEvent(Dr::key_left); + QKeyEvent leftEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier); + m_tester->keyPressEvent(&leftEvent); EXPECT_TRUE(g_funcname == "onPreBtnClicked_stub"); - m_tester->handleKeyPressEvent(Dr::key_right); + QKeyEvent rightEvent(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier); + m_tester->keyPressEvent(&rightEvent); EXPECT_TRUE(g_funcname == "onNextBtnClicked_stub"); } @@ -300,4 +304,3 @@ TEST_F(TestSlideWidget, testonUpdatePageImage) m_tester->onUpdatePageImage(0); EXPECT_TRUE(g_funcname == "0"); } -