qt鼠标事件过滤器

时间:2016-04-07 03:55:15

标签: qt qt5 qwidget qt-events

我有一个带有QGraphicsView和按钮的QWidget。 QGraphicsView必须通过鼠标按下和释放事件来检测滑动。同时按下按钮应该在点击时运行一个小功能。我在QWidget中使用了一个事件过滤器来检测鼠标事件。

bool Widget::eventFilter(QObject * obj, QEvent * event)
{
  // Capturing keyboard events for moving
  if( event->type() == QEvent::KeyPress )
  {
     //Do something
  }
  //Capturing mouse events for swipe
  else if( event->type() == QEvent::MouseButtonPress)
  {
     QMouseEvent* mouseEvent = static_cast<QMouseEvent*> (event);
     swipe_startPoint = mouseEvent->pos();
  }
  else if( event->type() == QEvent::MouseButtonRelease)
  {
    QMouseEvent* mouseEvent = static_cast<QMouseEvent*> (event);
    swipe_endPoint = mouseEvent->pos();
    swipeDirection();
  }
  else
  {
     QWidget::eventFilter(obj,event);
  }
}

在Widget类的构造函数中,我有以下

ui->graphicsView->installEventFilter(this);

问题是该按钮被点击了但是MouseButtonRelease事件设置了&#39; swipe_endPoint&#39;价值不起作用。

当我设置

ui->graphicsView->grabMouse();

鼠标按下并释放的事件工作正常,但按钮停止接受事件。

我尝试的其他事情是: -

将事件过滤器设置为viewPort

ui->graphicView->viewPort()->installEventFilter(this);

请帮我搞定这个鼠标事件。提前谢谢。

注意:在Ubuntu中使用QT 5.6.0

0 个答案:

没有答案