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