Qt QGraphicsview和对象移动上的鼠标事件

Qt QGraphicsview和对象移动上的鼠标事件,qt,Qt,我实现了一个Graphicsview,在其中我加载了一个图像,用户可以添加不同的项目,例如矩形或线条。用户还可以在场景中移动这些对象。到现在为止一切都很好 现在,我尝试以这种方式实现一些鼠标事件: bool MainWindow::eventFilter(QObject *obj, QEvent *event) { if (obj == ui->graphicsView && enable_mouse_event==true) { if

我实现了一个Graphicsview,在其中我加载了一个图像,用户可以添加不同的项目,例如矩形或线条。用户还可以在场景中移动这些对象。到现在为止一切都很好

现在,我尝试以这种方式实现一些鼠标事件:

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
 }
通过这种方式,可以识别press事件,而move事件只能在Qgraphicview对象的边界上识别(属性mouseTracking设置为true),并且我仍然可以移动另一个对象

为了解决移动事件的问题,我尝试通过添加以下内容来修改代码:

->viewport()
指向graphicview对象

这样,两个鼠标事件(按下和移动)都能正常工作,但我无法再移动其他对象(rect和line)

知道我如何识别所有鼠标事件并同时移动其他对象吗


谢谢

问题是我过滤掉了事件,它们从未进入窗口。不要将返回设置为true,只需将返回设置为false!
多亏了@thuga

我不太清楚您想要做什么,您是否正在尝试重新实现QGraphicsItem?添加QGraphicsRectItem、QGraphicsLineItem……不是更容易吗?这样,两个鼠标事件(按下和移动)都能正常工作,但我无法再移动其他对象(rect和line)。。可能是因为你过滤掉了事件,所以它永远不会进入视图?如果返回false会发生什么?这就是答案!多么愚蠢的错误!你说得对,谢谢@thuga
->viewport()