Changeset - df43ee6b1f57
[Not reviewed]
default
0 2 0
Hasan Yavuz ÖZDERYA - 10 years ago 2015-09-13 11:23:26
hy@ozderya.net
fixed double click not hiding tab widget issue on newer (>5.2) Qt versions
2 files changed with 24 insertions and 4 deletions:
0 comments (0 inline, 0 general)
hidabletabwidget.cpp
Show inline comments
 
@@ -18,12 +18,15 @@
 
*/
 

	
 
#include "hidabletabwidget.h"
 
#include <QTabBar>
 
#include <QToolButton>
 
#include <QSizePolicy>
 
#include <QTimer>
 

	
 
#define DOUBLE_CLICK_DELAY (200) // ms
 

	
 
HidableTabWidget::HidableTabWidget(QWidget *parent) :
 
    QTabWidget(parent),
 
    hideAction("▾", this)
 
{
 
    hideAction.setCheckable(true);
 
@@ -31,31 +34,46 @@ HidableTabWidget::HidableTabWidget(QWidg
 
    QToolButton* hideButton = new QToolButton();
 
    hideButton->setDefaultAction(&hideAction);
 
    hideButton->setAutoRaise(true);
 
    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()));
 
    }
 
}
 

	
 
void HidableTabWidget::onTabBarClicked()
 
{
 
    hideAction.setChecked(false);
 
}
 

	
 
void HidableTabWidget::onTabBarDoubleClicked()
 
{
 
    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()));
 
    }
 
}
hidabletabwidget.h
Show inline comments
 
@@ -31,9 +31,11 @@ public:
 
    QAction hideAction;
 

	
 
private slots:
 
    void onHideAction(bool checked);
 
    void onTabBarClicked();
 
    void onTabBarDoubleClicked();
 

	
 
    void connectSignals();
 
};
 

	
 
#endif // HIDABLETABWIDGET_H
0 comments (0 inline, 0 general)