Qt
QGraphics
Поиск…
Панорамирование, масштабирование и поворот с помощью 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);
}
};