Buscar..


Panorámica, zoom y rotación con QGraphicsView

QGraphics se puede usar para organizar escenas complicadas de objetos visuales en un marco que facilita su manejo.

Hay tres tipos principales de objetos utilizados en este marco QGraphicsView , QGraphicsScene y QGraphicsItems . QGraphicsItems son los elementos visuales básicos que existen en la escena.

Hay muchos tipos que están preconstruidos y se pueden usar, como elipses , líneas , rutas , pixmaps , polígonos , rectángulos y texto .

También puede hacer sus propios artículos heredando QGraphicsItem . Luego, estos elementos se colocan en un QGraphicsScene que es básicamente el mundo que planea ver. Los elementos pueden moverse dentro de la escena, lo cual es como hacer que se muevan en el mundo que estás mirando. El posicionamiento y la orientación de los elementos se manejan mediante matrices de transformación denominadas QTransforms . Qt tiene buenas funciones integradas, por lo que generalmente no necesita trabajar con QTransforms directamente, en lugar de eso, llama a funciones como rotar o escalar, que crean las transformaciones adecuadas para usted. Luego, la escena se ve según la perspectiva definida en QGraphicsView (de nuevo con QTransforms ), que es la pieza que pondría en un widget en su interfaz de usuario.

En el siguiente ejemplo, hay una escena muy simple con un solo elemento (un mapa de píxeles), que se coloca en una escena y se muestra en una vista. Al activar el indicador DragMode , la escena se puede desplazar con el mouse y con las funciones de escala y rotación se puede ampliar y reducir con el desplazamiento del mouse y rotar con las teclas de flecha.

Si desea ejecutar este ejemplo, cree una instancia de Vista que se mostrará y cree un archivo de recursos con el prefijo / imágenes que contengan una imagen 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow