gpt4 book ai didi

qt - 如何先在父级QWidget中处理qt鼠标事件,然后将其传递给子级?

转载 作者:行者123 更新时间:2023-12-02 05:35:05 25 4
gpt4 key购买 nike

我在父小部件中实现了一种手势监听器。如果鼠标事件是点击(按下并释放,没有任何移动事件),则该窗口小部件的子窗口应该处理该事件,如果不是,并且事件描述了滑动,则父窗口小部件应该处理该事件。有没有办法先将事件重定向到 parent ,然后重新广播它们,以便适当的 child 可以在需要时处理它。

最佳答案

我认为http://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter就是您正在寻找的。因此,您要做的就是设置继承自 QObject 的任何类,并将其设置为事件过滤器。引用文档中的内容:

An event filter is an object that receives all events that are sent to this object. 
The filter can either stop the event or forward it to this object.

链接中的示例适用于 QKeyEvent,但显然也可以适应使用各种鼠标功能。下面是一个虚拟示例,第一次点击 QPushButton 时会“吃掉”,而如果双击,该事件将照常进行(请注意,在这个特定示例中,首先您将调用“吃掉” ' 序列,在短时间内第二次单击时,按钮将接管)。

bool MyWidget::eventFilter(QObject *obj, QEvent *event)
{
if( obj != pushButton ) {
return QObject::eventFilter(obj, event);
}
if (event->type() == QEvent::MouseButtonPress ) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
qDebug("Intercepted mouse click with button %d", mouseEvent->button());
return true;
} else {
// standard event processing
return QObject::eventFilter(obj, event);
}
}

这有帮助吗?

关于qt - 如何先在父级QWidget中处理qt鼠标事件,然后将其传递给子级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24713403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com