#include <QTabWidget>
class QMyTabWidget : public QTabWidget
{
    Q_OBJECT
public:
    QMyTabWidget(QWidget *parent);
    ~QMyTabWidget();
public:
    void setFilter();
protected:
    bool eventFilter(QObject * object , QEvent * event);
    QTabBar * getTabBar();
private:
    
};
--------------------------------------------------------------------------------------------
#include "QMyTabWidget.h"
#include <QEvent>
#include <QTabBar>
QMyTabWidget::QMyTabWidget(QWidget *parent)
    : QTabWidget(parent)
{
    
}
QMyTabWidget::~QMyTabWidget()
{
}
QTabBar * QMyTabWidget::getTabBar()
{
    return tabBar();
}
void QMyTabWidget::setFilter()
{
    getTabBar()->installEventFilter(this);
    this->installEventFilter(this);
}
bool QMyTabWidget::eventFilter(QObject * object , QEvent * event)
{
    if (object == getTabBar() || object == this)
    {
        if (QEvent::MouseButtonDblClick == event->type())
        {
            //被双击的tab页一定是当前的tab页
            QWidget * widget = NULL;
            int tabIndex = this->currentIndex();
            widget = this->widget(tabIndex);
            this->removeTab(tabIndex);
            widget->setWindowFlags(Qt::Window/* | Qt::FramelessWindowHint*/);
            widget->setVisible(true);
        }
    }
    return QWidget::eventFilter(object , event);
}