Фильтр событий мыши 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