На этом шаге рассмотрим класс QGraphicsView.
Класс QGraphicsView является виджетом, предназначенным для визуализации содержимого сцены (QGraphicsScene). Подобное отделение данных от их графического представления позволяет отображать одну и ту же сцену (QGraphicsScene) в различных виджетах QGraphicsView.
Благодаря тому, что класс QGraphicsView унаследован от класса QAbstractScrollArea, при отображении появляются полосы прокрутки в случаях, когда пространства для показа сцены недостаточно. Все элементы, хранящиеся в QGraphicsScene, автоматически отображаются в окне представления.
В окне представления мы не рисуем изображение, а просто отображаем элементы модели и управляем ими. Виджеты класса QGraphicsView связаны с моделью и получают уведомления всякий раз, когда им необходимо обновить свое изображение. В связи с этим отпадает необходимость заботиться о перерисовке изображения содержимого представления, т. к. оно происходит автоматически.
Для того чтобы отцентрировать представление относительно определенной точки, можно вызвать метод QGraphicsView::centerOn(), передав в него координаты этой точки.
Более того, одно из свойств, которое получил класс QGraphicsView в наследство от класса QAbstractScrollArea, это то, что в качестве области просмотра (viewport) можно использовать любой виджет. Это позволяет заменять QWidget на QGLWidget (унаследован от класса QWidget, основное назначение — осуществлять связь OpenGL с виджетом, объекты класса QGLWidget могут использоваться в качестве контекста рисования для QPainter) и дает возможность выбора наиболее подходящего варианта для визуализации в процессе работы программы.
Установка виджета области просмотра осуществляется вызовом метода QAbstractScrollArea::setViewPort(). Например, для того чтобы изменить область просмотра на виджет, поддерживающий OpenGL, нужно сделать следующее:
pView->setViewport(new QGLWidget);
Использование матрицы трансформации, устанавливаемой методом setMatrix(), позволяет увеличивать, уменьшать и поворачивать отображаемую в представлении сцену.
На следующем шаге рассмотрим класс QGraphicsItem.