Поиск…


Панорамирование, масштабирование и поворот с помощью QGraphicsView

QGraphics может использоваться для организации сложных сцен визуальных объектов в рамках, что упрощает их обработку.

В этой структуре QGraphicsView , QGraphicsScene и QGraphicsItems используются три основных типа объектов. QGraphicsItems - это основные визуальные элементы, которые существуют в сцене.

Существует много типов, которые предварительно построены и могут использоваться, например, эллипсы , линии , пути , пиксели , многоугольники , прямоугольники и текст .

Вы также можете создавать свои собственные объекты, наследуя QGraphicsItem . Затем эти элементы помещаются в QGraphicsScene который в основном представляет собой мир, на который вы планируете посмотреть. Элементы могут перемещаться внутри сцены, которая похожа на то, что они перемещаются в мире, на котором вы смотрите. Позиционирование и ориентация элементов обрабатываются матрицами преобразования, называемыми QTransforms . Qt имеет хорошие функции, встроенные, поэтому вам обычно не нужно напрямую работать с QTransforms , вместо этого вы вызываете такие функции, как поворот или масштабирование, которые создают для вас правильные преобразования. Затем сцену просматривает перспектива, определенная в QGraphicsView (опять же с QTransforms ), которая является частью, которую вы поместили бы в виджет в пользовательском интерфейсе.

В следующем примере есть очень простая сцена с одним элементом (pixmap), который помещается в сцену и отображается в виде. Включив флаг DragMode сцену можно панорамировать с помощью мыши, а с помощью функций масштабирования и поворота можно масштабировать и прокручивать с помощью прокрутки мыши и поворачивать с помощью клавиш со стрелками.

Если вы хотите запустить этот пример, создайте экземпляр View, который будет отображаться, и создайте файл ресурсов с префиксом / изображениями, содержащими изображение 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow