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