2011-04-20 100 views

回答

0

您可以攔截QTabBar中的mouseMoveEvent事件。

編輯:如何

要攔截它的Qt你提供了一個很好的功能。您可以在您創建的窗口小部件上安裝事件過濾器,以便能夠獲取其子窗口小部件的過濾事件。請參閱關於installEventFilter函數的文檔。

+0

考慮到我是比較溫和的。我怎麼可以這樣做。我應該創建一個qtabbar的子類,如網絡上的droparea示例。建議。感謝您分享到目前爲止。 – nish 2011-04-20 10:45:36

+0

您可以繼承QTabBar,但Qt提供了其他更簡單的解決方案來獲取子部件的事件:請參閱我的更新的答案 – 2011-04-20 12:35:08

0

只需創建您自己的EventFilter。

// TabBarEventHandler 
class TabBarEventHandler : public QObject 
{ 
public: 
    explicit TabBarEventHandler(QTabWidget * tabWidget); 
    virtual ~TabBarEventHandler(); 

    void Initialize(); 

protected: 
    QTabWidget * mTabWidget; 

    virtual bool eventFilter(QObject* obj, QEvent* event) override; 
}; 


// TabBarEventHandler 
TabBarEventHandler::TabBarEventHandler(TabBar * tabWidget) 
    : mTabWidget(tabWidget) 
{ 
} 

TabBarEventHandler::~TabBarEventHandler() 
{ 
    mTabWidget->tabBar()->removeEventFilter(this); 
} 

void TabBarEventHandler::Initialize() 
{ 
    mTabWidget->tabBar()->installEventFilter(this); 
} 

bool TabBarEventHandler::eventFilter(QObject* obj, QEvent* event) 
{ 
    qDebug() << event->type(); 

    return QObject::eventFilter(obj, event); 
} 

void TabBarEventHandler::timerEvent(QTimerEvent* event) 
{ 
} 

而在你的小工具:

MyTabWidget::MyTabWidget(QWidget * parent) : QTabWidget(parent) 
{ 
    mEventHandler = new TabBarEventHandler(this); 
    mEventHandler->Initialize(); 
} 

MyTabWidget::~MyTabWidget() 
{ 
    delete mEventHandler; 
} 

調試輸出:

的QEvent ::類型(HoverMove)的QEvent ::類型(HoverMove) 的QEvent ::類型(MouseButtonPress )QEvent的::類型(InputMethodQuery) QEvent的::類型(InputMethodQuery)QEvent的::類型(InputMethodQuery) QEvent的::類型(描繪)的QEvent ::類型(描繪) QEvent的::Ť YPE(MouseButtonRelease)的QEvent ::類型(HoverMove) 的QEvent ::類型(HoverMove)的QEvent ::類型(假期)