Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
鼠标按在事件和qtabwidget上_Qt_Qtabwidget - Fatal编程技术网

鼠标按在事件和qtabwidget上

鼠标按在事件和qtabwidget上,qt,qtabwidget,Qt,Qtabwidget,需要的是,当鼠标(带有按钮)位于选项卡顶部时,它会被激活。 如何可能。您可以从QTabar截获事件 编辑:如何编辑 为了拦截它,Qt为您提供了强大的功能。您可以在已创建的小部件上安装事件过滤器,以便它能够获得其子小部件的已过滤事件。请参阅有关该函数的文档。只需创建自己的EventFilter // TabBarEventHandler class TabBarEventHandler : public QObject { public: explicit TabBarEventHandl

需要的是,当鼠标(带有按钮)位于选项卡顶部时,它会被激活。 如何可能。

您可以从QTabar截获事件

编辑:如何编辑


为了拦截它,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;
}