diff --git a/reader/browser/SheetBrowser.cpp b/reader/browser/SheetBrowser.cpp index c99da150b..d61023445 100644 --- a/reader/browser/SheetBrowser.cpp +++ b/reader/browser/SheetBrowser.cpp @@ -2062,6 +2062,16 @@ void SheetBrowser::jumpToPrevSearchResult() } } +void SheetBrowser::hideFindWidget() +{ + qCDebug(appLog) << "hideFindWidget"; + if (!m_findWidget.isNull()) { + m_findWidget->hide(); + m_findWidget->deleteLater(); + m_findWidget = nullptr; + } +} + void SheetBrowser::handleSearchStart() { qCDebug(appLog) << "SheetBrowser::handleSearchStart() - Handling search start"; diff --git a/reader/browser/SheetBrowser.h b/reader/browser/SheetBrowser.h index 54b245d7e..f8de05115 100644 --- a/reader/browser/SheetBrowser.h +++ b/reader/browser/SheetBrowser.h @@ -278,6 +278,12 @@ class SheetBrowser : public Dtk::Widget::DGraphicsView */ void handlePrepareSearch(); + /** + * @brief hideFindWidget + * 隐藏并销毁搜索框,切换标签页时调用,防止搜索串档 + */ + void hideFindWidget(); + /** * @brief jumpToNextSearchResult * 跳到下一个搜索条目中 diff --git a/reader/uiframe/CentralDocPage.cpp b/reader/uiframe/CentralDocPage.cpp index ec8837e50..cf553f22a 100644 --- a/reader/uiframe/CentralDocPage.cpp +++ b/reader/uiframe/CentralDocPage.cpp @@ -321,6 +321,8 @@ void CentralDocPage::onTabChanged(DocSheet *sheet) // 离开当前 sheet 前,保存其阅读状态 QPointer prevSheet = qobject_cast(m_stackedLayout->currentWidget()); if (prevSheet && prevSheet != sheet && prevSheet->opened()) { + // 关闭前一个 sheet 的搜索框,防止切换标签后搜索串档 + prevSheet->closeFindWidget(); prevSheet->saveCurrentViewState(); } diff --git a/reader/uiframe/DocSheet.cpp b/reader/uiframe/DocSheet.cpp index da4cfc7cc..e88d72b87 100644 --- a/reader/uiframe/DocSheet.cpp +++ b/reader/uiframe/DocSheet.cpp @@ -1598,6 +1598,14 @@ void DocSheet::jumpToPrevSearchResult() m_browser->jumpToPrevSearchResult(); } +void DocSheet::closeFindWidget() +{ + qCDebug(appLog) << "closeFindWidget"; + stopSearch(); + if (m_browser) + m_browser->hideFindWidget(); +} + void DocSheet::stopSearch() { qCDebug(appLog) << "stopSearch"; diff --git a/reader/uiframe/DocSheet.h b/reader/uiframe/DocSheet.h index fb12ca1a0..63a0c97a5 100644 --- a/reader/uiframe/DocSheet.h +++ b/reader/uiframe/DocSheet.h @@ -607,6 +607,12 @@ class DocSheet : public Dtk::Widget::DSplitter */ void jumpToPrevSearchResult(); + /** + * @brief closeFindWidget + * 关闭搜索框并停止搜索,切换标签页时调用 + */ + void closeFindWidget(); + /** * @brief showEncryPage * 显示解锁页面