diff --git a/hidabletabwidget.cpp b/hidabletabwidget.cpp --- a/hidabletabwidget.cpp +++ b/hidabletabwidget.cpp @@ -21,6 +21,9 @@ #include #include #include +#include + +#define DOUBLE_CLICK_DELAY (200) // ms HidableTabWidget::HidableTabWidget(QWidget *parent) : QTabWidget(parent), @@ -34,19 +37,22 @@ HidableTabWidget::HidableTabWidget(QWidg this->setCornerWidget(hideButton); connect(&hideAction, SIGNAL(toggled(bool)), this, SLOT(onHideAction(bool))); - connect(this, SIGNAL(tabBarClicked(int)), this, SLOT(onTabBarClicked())); - connect(this, SIGNAL(tabBarDoubleClicked(int)), this, SLOT(onTabBarDoubleClicked())); + connectSignals(); } void HidableTabWidget::onHideAction(bool checked) { - if (checked) + if (checked) // hide { this->setMaximumHeight(this->tabBar()->height()); + disconnect(this, SIGNAL(tabBarDoubleClicked(int)), this, SLOT(onTabBarDoubleClicked())); + QTimer::singleShot(DOUBLE_CLICK_DELAY, this, SLOT(connectSignals())); } - else + else // show { this->setMaximumHeight(100000); // just a very big number + disconnect(this, SIGNAL(tabBarClicked(int)), this, SLOT(onTabBarClicked())); + QTimer::singleShot(DOUBLE_CLICK_DELAY, this, SLOT(connectSignals())); } } @@ -59,3 +65,15 @@ void HidableTabWidget::onTabBarDoubleCli { hideAction.setChecked(true); } + +void HidableTabWidget::connectSignals() +{ + if (hideAction.isChecked()) // hidden + { + connect(this, SIGNAL(tabBarClicked(int)), this, SLOT(onTabBarClicked())); + } + else // shown + { + connect(this, SIGNAL(tabBarDoubleClicked(int)), this, SLOT(onTabBarDoubleClicked())); + } +}