diff --git a/frontend/control/stack-pages/search-page-section.cpp b/frontend/control/stack-pages/search-page-section.cpp index fb5973e..b2baf60 100644 --- a/frontend/control/stack-pages/search-page-section.cpp +++ b/frontend/control/stack-pages/search-page-section.cpp @@ -301,6 +301,14 @@ void ResultArea::pressUp() } } +int ResultArea::getVScrollBarWidth() +{ + if (verticalScrollBar()->isVisible()) { + return this->verticalScrollBar()->width(); + } + return 0; +} + bool ResultArea::getSelectedState() { return m_is_selected; @@ -414,6 +422,8 @@ bool ResultArea::viewportEvent(QEvent *event) void ResultArea::initUi() { + m_scrollBar = new ResultScrollBar(this); + this->setVerticalScrollBar(m_scrollBar); // this->verticalScrollBar()->setProperty("drawScrollBarGroove", false); QPalette pal = palette(); QPalette scroll_bar_pal = this->verticalScrollBar()->palette(); @@ -518,6 +528,8 @@ void ResultArea::initConnections() connect(this, &ResultArea::resizeWidth, this, [=] (int size) { m_titleLabel->setFixedWidth(size); }); + connect(m_scrollBar, &ResultScrollBar::scrollBarAppeared, this, &ResultArea::scrollBarAppeared); + connect(m_scrollBar, &ResultScrollBar::scrollBarIsHideen, this, &ResultArea::scrollBarIsHideen); } void ResultArea::setupConnectionsForWidget(ResultWidget *widget) @@ -821,3 +833,20 @@ void DetailWidget::clearLayout(QLayout *layout) // } // } //} + +ResultScrollBar::ResultScrollBar(QWidget *parent) : QScrollBar(parent) +{ + +} + +void ResultScrollBar::showEvent(QShowEvent *event) +{ + Q_EMIT this->scrollBarAppeared(); + return QScrollBar::showEvent(event); +} + +void ResultScrollBar::hideEvent(QHideEvent *event) +{ + Q_EMIT this->scrollBarIsHideen(); + return QScrollBar::hideEvent(event); +} diff --git a/frontend/control/stack-pages/search-page-section.h b/frontend/control/stack-pages/search-page-section.h index 5f42d25..2559d13 100644 --- a/frontend/control/stack-pages/search-page-section.h +++ b/frontend/control/stack-pages/search-page-section.h @@ -21,6 +21,7 @@ #ifndef SEARCHPAGESECTION_H #define SEARCHPAGESECTION_H #include +#include #include #include #include @@ -30,6 +31,22 @@ #include "web-search-view.h" namespace UkuiSearch { +class ResultScrollBar : public QScrollBar +{ + Q_OBJECT +public: + ResultScrollBar(QWidget *parent = nullptr); + ~ResultScrollBar() = default; + +protected: + void showEvent(QShowEvent *event); + void hideEvent(QHideEvent *event); + +Q_SIGNALS: + void scrollBarAppeared(); + void scrollBarIsHideen(); +}; + class ResultArea : public QScrollArea { Q_OBJECT @@ -44,6 +61,7 @@ public: void pressEnter(); void pressDown(); void pressUp(); + int getVScrollBarWidth(); void setResultSelection(); bool getSelectedState(); @@ -71,6 +89,7 @@ private: BestListWidget * m_bestListWidget = nullptr; QList m_widget_list; TitleLabel * m_titleLabel = nullptr; + ResultScrollBar *m_scrollBar = nullptr; bool m_detail_open_state = false; bool m_is_selected = false; @@ -86,6 +105,8 @@ Q_SIGNALS: void resizeHeight(int height); void resizeWidth(const int &); void rowClicked(); + void scrollBarAppeared(); + void scrollBarIsHideen(); }; class DetailWidget : public QWidget @@ -153,7 +174,6 @@ Q_SIGNALS: //protected: // bool eventFilter(QObject *, QEvent *); //}; - } #endif // SEARCHPAGESECTION_H diff --git a/frontend/control/stack-pages/search-result-page.cpp b/frontend/control/stack-pages/search-result-page.cpp index 25cd398..e83c52c 100644 --- a/frontend/control/stack-pages/search-result-page.cpp +++ b/frontend/control/stack-pages/search-result-page.cpp @@ -118,6 +118,15 @@ void SearchResultPage::sendResizeWidthSignal(int size) Q_EMIT this->resizeWidth(size); } +void SearchResultPage::setWidth(int width) +{ + int margin = m_resultArea->getVScrollBarWidth(); + if (!margin) { + margin = 8;//Default margin is 8 + } + this->sendResizeWidthSignal(width - margin); +} + void SearchResultPage::paintEvent(QPaintEvent *event) { QPainter p(this); @@ -197,11 +206,19 @@ void SearchResultPage::initConnections() connect(this, &SearchResultPage::startSearch, m_detailArea, &DetailArea::hide); connect(this, &SearchResultPage::stopSearch, m_detailArea, &DetailArea::hide); connect(this, &SearchResultPage::startSearch, this, [=] () { - sendResizeWidthSignal(656); +// sendResizeWidthSignal(656); + setWidth(672); + }); + connect(m_resultArea, &ResultArea::scrollBarAppeared, this, [ & ]{ + setWidth(672); + }); + connect(m_resultArea, &ResultArea::scrollBarIsHideen, this, [ & ]{ + setWidth(672); }); connect(m_resultArea, &ResultArea::keyPressChanged, m_detailArea, &DetailArea::setWidgetInfo); connect(m_resultArea, &ResultArea::keyPressChanged, this, [=] () { - sendResizeWidthSignal(280); +// sendResizeWidthSignal(280); + setWidth(296); }); connect(m_resultArea, &ResultArea::currentRowChanged, m_detailArea, &DetailArea::setWidgetInfo); connect(m_resultArea, &ResultArea::currentRowChanged, this, &SearchResultPage::currentRowChanged); @@ -209,7 +226,8 @@ void SearchResultPage::initConnections() connect(m_resultArea, &ResultArea::resizeHeight, this, &SearchResultPage::resizeHeight); connect(this, &SearchResultPage::resizeWidth, m_resultArea, &ResultArea::resizeWidth); connect(m_resultArea, &ResultArea::rowClicked, this, [=] () { - sendResizeWidthSignal(280); +// sendResizeWidthSignal(280); + setWidth(296); }); connect(this, &SearchResultPage::setSelectionInfo, m_resultArea, &ResultArea::setSelectionInfo); //跟随主题透明度变化 @@ -231,7 +249,8 @@ void SearchResultPage::setupConnectionsForWidget(ResultWidget *widget) }); connect(this, &SearchResultPage::currentRowChanged, widget, &ResultWidget::clearSelectedRow); connect(widget, &ResultWidget::rowClicked, this, [=] () { - sendResizeWidthSignal(280); +// sendResizeWidthSignal(280); + setWidth(296); }); connect(this, &SearchResultPage::resizeWidth, widget, &ResultWidget::resizeWidth); } diff --git a/frontend/control/stack-pages/search-result-page.h b/frontend/control/stack-pages/search-result-page.h index 2813c7f..f501620 100644 --- a/frontend/control/stack-pages/search-result-page.h +++ b/frontend/control/stack-pages/search-result-page.h @@ -40,6 +40,7 @@ public: void pressDown(); bool getSelectedState(); void sendResizeWidthSignal(int size); + void setWidth(int width); protected: void paintEvent(QPaintEvent *event);