Qt
QGraphics
Zoeken…
Pan, zoom en roteer met QGraphicsView
QGraphics
kan worden gebruikt om gecompliceerde scènes van visuele objecten te ordenen in een kader dat ze gemakkelijker te hanteren maakt.
Er worden drie hoofdtypen objecten gebruikt in dit framework QGraphicsView , QGraphicsScene en QGraphicsItems . QGraphicsItems zijn de elementaire visuele items die in de scène voorkomen.
Er zijn vele soorten die zijn pre-gebouwd en kan worden gebruikt, zoals ellipsen , lijnen , paden , pixmaps , veelhoeken , rechthoeken en tekst .
U kunt ook uw eigen items maken door QGraphicsItem
. Deze items worden vervolgens in een QGraphicsScene
wat in feite de wereld is die u van plan bent te bekijken. De items kunnen binnen de scène worden verplaatst, alsof ze worden verplaatst in de wereld waarnaar u kijkt. De positionering en oriëntatie van de items wordt afgehandeld door transformatiematrices die QTransforms worden genoemd . Qt heeft leuke functies ingebouwd, zodat u meestal niet direct met de QTransforms
hoeft te werken, in plaats daarvan roept u functies zoals roteren of schalen op die de juiste transformaties voor u creëren. De scène wordt vervolgens bekeken vanuit het perspectief dat is gedefinieerd in de QGraphicsView
(opnieuw met QTransforms
), het stuk dat u in een widget in uw gebruikersinterface zou plaatsen.
In het volgende voorbeeld is er een zeer eenvoudige scène met slechts één item (een pixmap), die in een scène wordt geplaatst en in een weergave wordt weergegeven. Door de DragMode
vlag in te DragMode
, kan de scène met de muis worden DragMode
en met behulp van de schaal- en DragMode
kan de scène worden DragMode
en uitgeschakeld met de muisknop en worden gedraaid met de pijltjestoetsen.
Als u wilt lopen dit voorbeeld maakt u een exemplaar van weergave die wordt weergegeven en het creëren van een bron bestand met de prefix / foto's die een beeld 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);
}
};