QGraphicsview和Object Movement上的鼠标事件

时间:2015-05-20 15:13:29

标签: qt

我实现了一个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对象。

通过这种方式,鼠标事件(按下和移动)都能正常工作,但我不再能够移动其他对象(矩形和直线)

任何想法如何识别所有鼠标事件并同时移动其他对象?

感谢

1 个答案:

答案 0 :(得分:0)

问题是我过滤掉了这些事件而且他们从未进入过窗口。而不是设置返回true只是设置返回false! 感谢@thuga