鼠标按在事件和qtabwidget上
需要的是,当鼠标(带有按钮)位于选项卡顶部时,它会被激活。 如何可能。您可以从QTabar截获事件 编辑:如何编辑鼠标按在事件和qtabwidget上,qt,qtabwidget,Qt,Qtabwidget,需要的是,当鼠标(带有按钮)位于选项卡顶部时,它会被激活。 如何可能。您可以从QTabar截获事件 编辑:如何编辑 为了拦截它,Qt为您提供了强大的功能。您可以在已创建的小部件上安装事件过滤器,以便它能够获得其子小部件的已过滤事件。请参阅有关该函数的文档。只需创建自己的EventFilter // TabBarEventHandler class TabBarEventHandler : public QObject { public: explicit TabBarEventHandl
为了拦截它,Qt为您提供了强大的功能。您可以在已创建的小部件上安装事件过滤器,以便它能够获得其子小部件的已过滤事件。请参阅有关该函数的文档。只需创建自己的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)
{
}
调试输出:
QEvent::Type(悬停移动)QEvent::Type(悬停移动)
QEvent::Type(MouseButtonPress)QEvent::Type(InputMethodQuery)
QEvent::Type(InputMethodQuery)QEvent::Type(InputMethodQuery)
QEvent::Type(Paint)QEvent::Type(Paint)
QEvent::Type(鼠标按钮释放)QEvent::Type(鼠标移动)
QEvent::Type(悬停移动)QEvent::Type(离开)
考虑到我相对温和。我可以怎样做呢。我是否应该像网络上的droparea示例那样创建QTabar的子类。建议。感谢您分享到目前为止。您可以子类QTabar,但Qt提供了另一个更简单的解决方案来获取子部件的事件:查看我的更新答案
MyTabWidget::MyTabWidget( QWidget * parent ) : QTabWidget( parent )
{
mEventHandler = new TabBarEventHandler( this );
mEventHandler->Initialize();
}
MyTabWidget::~MyTabWidget()
{
delete mEventHandler;
}