鼠标按下事件和qtabwidget
答
您可以拦截QTabBar中的mouseMoveEvent事件。
编辑:如何
要拦截它的Qt你提供了一个很好的功能。您可以在您创建的窗口小部件上安装事件过滤器,以便能够获取其子窗口小部件的过滤事件。请参阅关于installEventFilter函数的文档。
答
只需创建您自己的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 ::类型(假期)
考虑到我是比较温和的。我怎么可以这样做。我应该创建一个qtabbar的子类,如网络上的droparea示例。建议。感谢您分享到目前为止。 – nish 2011-04-20 10:45:36
您可以继承QTabBar,但Qt提供了其他更简单的解决方案来获取子部件的事件:请参阅我的更新的答案 – 2011-04-20 12:35:08