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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow