Qt
QGraphics
Szukaj…
Przesuwaj, powiększaj i obracaj za pomocą QGraphicsView
QGraphics
może służyć do organizowania skomplikowanych scen obiektów wizualnych w ramy, które ułatwiają obsługę.
Istnieją trzy główne typy obiektów używanych w tej strukturze QGraphicsView , QGraphicsScene i QGraphicsItems . QGraphicsItems to podstawowe elementy wizualne istniejące na scenie.
Istnieje wiele typów, które są wstępnie zbudowane i można ich używać, takich jak elipsy , linie , ścieżki , mapy pikseli , wielokąty , prostokąty i tekst .
Możesz także tworzyć własne przedmioty, dziedzicząc QGraphicsItem
. Te elementy są następnie umieszczane w QGraphicsScene
który jest zasadniczo światem, na który planujesz spojrzeć. Przedmioty mogą poruszać się w scenie, co przypomina ruch w świecie, na który patrzysz. Pozycjonowanie i orientacja pozycji są obsługiwane przez macierze transformacji zwane QTransforms . Qt ma wbudowane ładne funkcje, więc zwykle nie musisz bezpośrednio pracować z QTransforms
, zamiast tego wywołujesz funkcje takie jak obracanie lub skalowanie, które tworzą dla ciebie odpowiednie transformacje. Scena jest następnie oglądana przez perspektywę zdefiniowaną w QGraphicsView
(ponownie z QTransforms
), która jest kawałkiem, który umieściłbyś w widżecie w twoim interfejsie użytkownika.
W poniższym przykładzie jest bardzo prosta scena z tylko jednym elementem (pixmapą), która jest umieszczana w scenie i wyświetlana w widoku. Po włączeniu flagi DragMode
scenę można przesuwać myszką, a za pomocą funkcji skalowania i obracania można ją przeskalowywać i przewijać za pomocą przewijania myszy oraz obracać za pomocą klawiszy strzałek.
Jeśli chcesz uruchomić ten przykład, stwórz instancję View, która zostanie wyświetlona i utwórz plik zasobów z przedrostkiem / obrazami zawierającymi obraz my_image.png.
#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);
}
};