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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow