Фильтр событий мыши qt

У меня есть QWidget с QGraphicsView и кнопкой. 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, которое устанавливает значение swipe_endPoint, не работает.

Когда я установил

ui->graphicsView->grabMouse();

события нажатия и отпускания мыши работают отлично, но кнопка перестает принимать события.

Другие вещи, которые я пробовал:

Установите фильтр событий на viewPort

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

Пожалуйста, помогите мне заставить это событие мыши работать. Заранее спасибо.

Примечание: использование QT 5.6.0 в Ubuntu

0 ответов

Другие вопросы по тегам