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);