Seite 1 von 1

Probleme mit QGraphicsView und Mouse Events

Verfasst: 24. Juli 2008 18:12
von tomf
Hi!

Ich würde gerne in meiner QGraphicsView mittels Space + Linker Maustaste die Scene verschieben und mittels Space + Rechter Maustaste zoomen. Solange nicht diese Tastenkombinationen gedrückt sind sollen die einzelnen QGraphicsItems die Mouse Events (Click, Hover...) erhalten.

Derzeit verwenden meine Items noch die Standard Mouse-Event Implementierungen.

Das Problem ist, dass zwar alle Events wie erwartet ankommen, jedoch in der mouseMoveEvent Methode die Position (event->pos) immer gleich bleibt während Space gedrückt ist. Ohne gedrückter Space Taste ändert sich die Position je nachdem wo meine Maus sich befindet. Halte ich Space gedrückt wird die Position genommen an sich die Maus befand und diese ändert sich nicht mehr.

Wenn ich die einzelnen Events nicht an meine Items weiterreichte - also nie ein QGraphicsView::mouseXEvent(event) aufrufe funktioniert das zoomen/verschieben einwandfrei.

Hat jemand eine Idee?


Meine QGraphicsView:

Code: Alles auswählen

      //--------------------------------------------------------------------------------
      void GraphicsView::mousePressEvent(QMouseEvent *event)
      {
          if(_key != Qt::Key_Space)
          {
              QGraphicsView::mousePressEvent(event);
              event->ignore();
              return;
          }

          //save mouse position
          _last_position = event->pos();

      }

      //--------------------------------------------------------------------------------
      void GraphicsView::mouseReleaseEvent(QMouseEvent *event)
      {
          if(_key != Qt::Key_Space)
          {
              QGraphicsView::mouseReleaseEvent(event);
              event->ignore();
              return;
          }

          setCursor(_default_cursor);
      }

      //--------------------------------------------------------------------------------
      void GraphicsView::mouseMoveEvent(QMouseEvent *event)
      {
          if(_key != Qt::Key_Space)
          {
              QGraphicsView::mouseMoveEvent(event);
              event->ignore();
              return;
          }

          int dx = event->x() - _last_position.x();
          int dy = event->y() - _last_position.y();

          //save mouse position.
          _last_position = event->pos();

          qDebug() << "pos: " << event->pos().x() << " " << event->pos().y();

          if (event->buttons() == Qt::LeftButton)
          {
              setCursor(_move_cursor);
              pan(dx, dy);
          }
          else if (event->buttons() == Qt::RightButton)
          {
              zoom(dx);
          }
      }

      //--------------------------------------------------------------------------------
      void GraphicsView::keyPressEvent(QKeyEvent *event)
      {
          _key = event->key();
      }

      //--------------------------------------------------------------------------------
      void GraphicsView::keyReleaseEvent(QKeyEvent *event)
      {
          _key = 0;
      }