【问题标题】:How to process qt mouse events in parent QWidget first, and then pass it to children?如何先处理父QWidget中的qt鼠标事件,再传给子子?
【发布时间】:2014-07-12 13:27:21
【问题描述】:

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

【问题讨论】:

    标签: qt event-handling


    【解决方案1】:

    我认为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);
      }
    }
    

    这有帮助吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 2011-04-22
      • 2010-10-07
      相关资源
      最近更新 更多