Suche…


Schwenken, zoomen und drehen Sie mit QGraphicsView

QGraphics lassen sich komplizierte Szenen visueller Objekte zu einem Rahmen zusammenfassen, der sie einfacher handhabbar macht.

In diesem Framework werden drei Haupttypen von Objekten verwendet: QGraphicsView , QGraphicsScene und QGraphicsItems . QGraphicsItems sind die grundlegenden visuellen Elemente, die in der Szene vorhanden sind.

Es gibt viele vorgefertigte Typen, die verwendet werden können, z. B. Ellipsen , Linien , Pfade , Pixmaps , Polygone , Rechtecke und Text .

Sie können auch eigene Objekte QGraphicsItem indem Sie QGraphicsItem erben. Diese Elemente werden dann in einem QGraphicsScene abgelegt. QGraphicsScene ist im Wesentlichen die Welt, die Sie betrachten QGraphicsScene . Die Objekte können sich innerhalb der Szene bewegen, als ob sie sich in der von Ihnen betrachteten Welt bewegen würden. Die Positionierung und Ausrichtung der Elemente wird von Transformationsmatrizen ( QTransforms) behandelt . Qt verfügt über integrierte Funktionen, sodass Sie normalerweise nicht direkt mit QTransforms müssen. Stattdessen rufen Sie Funktionen wie Drehen oder QTransforms , die die richtigen Transformationen für Sie erstellen. Die Szene wird dann aus der Perspektive betrachtet, die in QGraphicsView definiert wurde (wiederum mit QTransforms ). QTransforms ist der Teil, den Sie in ein Widget Ihrer Benutzeroberfläche QTransforms würden.

Im folgenden Beispiel gibt es eine sehr einfache Szene mit nur einem Element (einer Pixmap), die in eine Szene eingefügt und in einer Ansicht angezeigt wird. Durch DragMode des DragMode Flags kann die Szene mit der Maus verschoben werden. Mit den Funktionen zum DragMode und Drehen kann sie mit dem Mauszeiger DragMode und ausgeblendet und mit den Pfeiltasten gedreht werden.

Wenn Sie dieses Beispiel ausführen möchten, erstellen Sie eine Instanz von View, die angezeigt wird, und erstellen Sie eine Ressourcendatei mit dem Präfix / images, die ein Bild my_image.png enthält.

#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsPixmapItem>
#include <QWheelEvent>
#include <QKeyEvent>

class View : public QGraphicsView
{
  Q_OBJECT
public:
  explicit View(QWidget *parent = 0) :
    QGraphicsView(parent)
  {
    setDragMode(QGraphicsView::ScrollHandDrag);

    QGraphicsPixmapItem *pixmapItem = new QGraphicsPixmapItem(QPixmap(":/images/my_image.png"));
    pixmapItem->setTransformationMode(Qt::SmoothTransformation);

    QGraphicsScene *scene = new QGraphicsScene();
    scene->addItem(pixmapItem);
    setScene(scene);
  }

protected Q_SLOTS:
  void wheelEvent(QWheelEvent *event)
  {
    if(event->delta() > 0)
      scale(1.25, 1.25);
    else
      scale(0.8, 0.8);
  }

  void keyPressEvent(QKeyEvent *event)
  {
    if(event->key() == Qt::Key_Left)
      rotate(1);
    else if(event->key() == Qt::Key_Right)
      rotate(-1);
  }
};


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow