我实现了一个Graphicsview,我在其中加载了一个Image,用户可以添加不同的项目,如矩形或线条。用户还可以在场景中移动这些对象。到这里一切都很好。
现在我尝试以这种方式实现一些鼠标事件:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui->graphicsView && enable_mouse_event==true)
{
if (event->type() == QEvent::MouseButtonPress)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
point_mouse = ui->graphicsView->mapFrom(ui->graphicsView, mouseEvent->pos());
return true;
}
if (event->type() == QEvent::MouseMove)
{
int scroll_x, scroll_y;
scroll_x = ui->graphicsView->horizontalScrollBar()->value();
scroll_y = ui->graphicsView->verticalScrollBar()->value();
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
point_mouse_move = ui->graphicsView->mapFrom(ui->graphicsView, mouseEvent->pos());
QRect rect(point_mouse_move.x()+scroll_x-50, point_mouse_move.y()+scroll_y-50, 100, 100);
zoom_image = image_clone.copy(rect);
ui->zoom_label->setPixmap(QPixmap::fromImage(zoom_image));
return true;
}
}
return false
}
在MainWindow.cpp中使用
ui->graphicsView->installEventFilter(this);
通过这种方式,只有在Qgraphicview对象的边界上识别移动事件(属性mouseTracking设置为true)才能识别按下事件,并且我仍然可以移动另一个对象。
要解决移动事件的问题,我尝试通过添加:
来修改代码->viewport()
到graphicview对象。
通过这种方式,鼠标事件(按下和移动)都能正常工作,但我不再能够移动其他对象(矩形和直线)
任何想法如何识别所有鼠标事件并同时移动其他对象?
感谢
答案 0 :(得分:0)
问题是我过滤掉了这些事件而且他们从未进入过窗口。而不是设置返回true只是设置返回false! 感谢@thuga