Dibujo en Qt. Parte I. El comienzo.

1. Añadir el QGraphicsView a la ventana principal desde el editor gráfico. Los dibujos se hacen sobre un QGraphicsScene que hay que añadir en el mainwindow.h

El mainwindow.h se queda así:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsScene>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
    QGraphicsScene scene;
};

#endif // MAINWINDOW_H

2. Preparar el QGraphicsScene.
2.1. Lo primero darle tamaño al QGraphcsScene y tener una pluma con la que dibujar. En el constructor del mainWindow poner lo siguiente:

//includes
#include "QGraphicsView"
#include "QRectF"

QRectF rect(0,0,640,480); //Escena de 640x480
QPen  pen; //Pluma por defecto: Negro y 1px de ancho.

scene.setSceneRect(rect);

2.2. Dibujar algo. Un marco para la escena, una retícula y un saludo.

    scene.addText("hola mundo!");

    scene.addLine(0,0,640,0,pen);
    scene.addLine(640,0,640,480,pen);
    scene.addLine(0,480,640,480,pen);
    scene.addLine(0,0,0,480,pen);

    for (int x = 0; x < 640; x+=20) {
        scene.addLine(x,0,x,480,pen);
    }

    for (int y = 0; y < 480; y+=20) {
        scene.addLine(0,y,640,y,pen);
    }
}

3. Mostrar la escena.

    ui->graphicsView->setScene(&scene);
    ui->graphicsView->show();

4. Conclusión.
El constructor se queda así:

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

    QRectF rect(0,0,640,480);
    QPen  pen;

    scene.setSceneRect(rect);
    scene.addText("hola mundo!");

    scene.addLine(0,0,640,0,pen);
    scene.addLine(640,0,640,480,pen);
    scene.addLine(0,480,640,480,pen);
    scene.addLine(0,0,0,480,pen);

    for (int x = 0; x < 640; x+=20) {
        scene.addLine(x,0,x,480,pen);
    }

    for (int y = 0; y < 480; y+=20) {
        scene.addLine(0,y,640,y,pen);
    }


    ui->graphicsView->setScene(&scene);
    ui->graphicsView->show();
}

Continuá..

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Time limit is exhausted. Please reload CAPTCHA.