Ricerca…


Panoramica, zoom e rotazione con QGraphicsView

QGraphics può essere utilizzato per organizzare scene complicate di oggetti visivi in ​​una struttura che li rende più facili da gestire.

Esistono tre tipi principali di oggetti utilizzati in questo framework QGraphicsView , QGraphicsScene e QGraphicsItems . QGraphicsItem sono gli elementi visivi di base che esistono nella scena.

Ci sono molti tipi che sono pre-costruiti e possono essere usati come Ellissi , Linee , Percorsi , Pixmap , Poligoni , Rettangoli e Testo .

Puoi anche creare i tuoi oggetti ereditando QGraphicsItem . Questi elementi vengono quindi inseriti in una QGraphicsScene che è fondamentalmente il mondo che stai pensando di guardare. Gli oggetti possono muoversi all'interno della scena che è come farli muovere nel mondo che stai guardando. Il posizionamento e l'orientamento degli oggetti è gestito da matrici di trasformazione denominate QTransforms . Qt ha delle belle funzioni incorporate, quindi di solito non è necessario lavorare con QTransforms direttamente, ma chiamate funzioni come rotate o scale che creano le trasformazioni appropriate per voi. La scena viene quindi visualizzata dalla prospettiva definita in QGraphicsView (sempre con QTransforms ), che è il pezzo che inseriresti in un widget nell'interfaccia utente dell'utente.

Nell'esempio seguente c'è una scena molto semplice con un solo oggetto (una pixmap), che viene inserito in una scena e visualizzato in una vista. DragMode flag DragMode , la scena può essere ruotata attorno al mouse e usando la scala e ruotando le funzioni può essere ridimensionata dentro e fuori con lo scroll del mouse e ruotata con i tasti freccia.

Se si desidera eseguire questo esempio, creare un'istanza di Vista che verrà visualizzata e creare un file di risorse con il prefisso / le immagini che contengono un'immagine 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow