2011-04-20 64 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 ::类型(假期)