QGraphicsView e QGraphicsScene

Neste tutorial, aprenderemos QGraphicsView e QGraphicsScene.

A classe QGraphicsView fornece um widget para exibir o conteúdo de um QGraphicsScene.

QGraphicsView visualiza o conteúdo de um QGraphicsScene em uma viewport rolável. QGraphicsView faz parte do Graphics View Framework.

A classe QGraphicsScene fornece uma superfície para gerenciar um grande número de itens gráficos 2D.

A classe serve como um contêiner para QGraphicsItems. Ele é usado em conjunto com o QGraphicsView para visualizar itens gráficos, como linhas, retângulos, texto ou até mesmo itens personalizados, em uma superfície 2D. QGraphicsScene faz parte do Graphics View Framework.

Criando um exemplo

Aplicativo Qt->Qt Gui:

Precisamos colocar GraphicsView em nossa caixa de diálogo:

Se compilamos e executarmos neste ponto, obteremos:

Não vemos nada além de uma visão. Esse é o GraphicsView. Criaremos uma cena e a cena será exibida com os itens que adicionaremos. Em outras palavras, a classe QGraphicsView fornece um widget para exibir o conteúdo de um QGraphicsScene.
Aqui está o dialog.h e o dialog.cpp modificado:

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsItem>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT
    
public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    
private:
    Ui::Dialog *ui;

    QGraphicsScene *scene;
    QGraphicsEllipseItem *ellipse;
    QGraphicsRectItem *rectangle;
    QGraphicsTextItem *text;
};
#endif // DIALOG_H

dialog..cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    scene = new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);

    QBrush greenBrush(Qt::green);
    QBrush blueBrush(Qt::blue);
    QPen outlinePen(Qt::black);
    outlinePen.setWidth(2);

    rectangle = scene->addRect(100, 0, 80, 100, outlinePen, blueBrush);

    // addEllipse(x,y,w,h,pen,brush)
    ellipse = scene->addEllipse(0, -100, 300, 60, outlinePen, greenBrush);

    text = scene->addText("bogotobogo.com", QFont("Arial", 20) );
    // movable text
    text->setFlag(QGraphicsItem::ItemIsMovable);
}

Dialog::~Dialog()
{
    delete ui;
}

Como funciona?
Criamos um objeto QGraphicsScene, cena:

cena = new QGraphicsScene(this);

Em seguida, colocamos a cena em graphicsView:

ui->graphicsView->setScene(scene);

Itens foram adicionados à cena, por exemplo

scene->addText();

Executando o código
Se executarmos o código, teremos:

Observe que o text é móvel definindo assim:

text->setFlag(QGraphicsItem::ItemIsMovable);