1

我有一个带有 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);

问题是按钮被单击,但设置“swipe_endPoint”值的 MouseButtonRelease 事件不起作用。

当我设置

ui->graphicsView->grabMouse();

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

我尝试过的其他事情是:-

将事件过滤器设置为视口

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

请帮我让这个鼠标事件正常工作。提前致谢。

注意:在 Ubuntu 中使用 QT 5.6.0

4

0 回答 0