Qt
QGrafiken
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);
}
};