鼠标按下事件和qtabwidget

时间:2011-04-20 08:22:58

标签: qt qtabwidget

需要当鼠标(带按钮)位于标签顶部时,它会被激活。 怎么可能。

2 个答案:

答案 0 :(得分:0)

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

修改:如何

拦截它Qt为您提供了很棒的功能。您可以在已创建的窗口小部件上安装事件过滤器,以便能够获取其子窗口小部件的过滤事件。请参阅有关installEventFilter函数的文档。

答案 1 :(得分: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 :: Type(HoverMove)QEvent :: Type(HoverMove)   QEvent :: Type(MouseButtonPress)QEvent :: Type(InputMethodQuery)   QEvent :: Type(InputMethodQuery)QEvent :: Type(InputMethodQuery)   QEvent :: Type(Paint)QEvent :: Type(Paint)   QEvent :: Type(MouseButtonRelease)QEvent :: Type(HoverMove)   QEvent :: Type(HoverMove)QEvent :: Type(Leave)