Utilisation de GraphicsView

Un GraphicsView est une zone graphique comportant des scènes.

Une scène est un élément graphique : image, video, figure géométrique, etc....

Les origines de la vue, de la scène et des objets sont différentes...

    • L'origine de la vue est le point supérieur gauche
    • l'origine de la scène est le milieu de la scène
    • l'origine de l'objet est le centre de l'objet

Initialisation du graphicsView

  • GraphicsView peut être placé avec QTDesigner :

  • Il faut associer graphicsView avec une GraphicScene :

dans l'entête :

#include <QGraphicsScene>

.....

private:

    QGraphicsScene *scene;

dans le code cpp

    scene = new QGraphicsScene(this);

    scene->setSceneRect(QRectF(0,0,400,400));

    ui->graphicsView->setScene(scene);

setSceneRect permet de définir la zone de la scène et positionne également l'origine.

Sans cette ligne d'instruction, tous les objets placés seront placés au centre :


Dessiner dans un graphicsView

  • Pour dessiner dans un graphicsView, il faut définir le crayon (contour des objets) et la brosse (remplissage des objets)

dans le header :

    QBrush *blueBrush;

    QPen *blackPen;

dans le code :

    blueBrush = new QBrush();

    blueBrush->setColor(Qt::blue);

    blueBrush->setStyle(Qt::SolidPattern);//type solid

    blackPen = new QPen();

    blackPen->setColor(Qt::black);

    blackPen->setWidth(4);//largeur du pinceau

  • Les figures se placent ensuite grâce à des méthodes spécifiques :

dans le header :

    QGraphicsRectItem *rectangle;

    QGraphicsEllipseItem *ellipse;

dans le code :

//les paramètres sont coordonnéX, coordonnéY, largeur, hauteur, crayon, brosse

rectangle = scene->addRect(0,0,50, 100, *blackPen,*redBrush);

ellipse = scene->addEllipse(100,80,20,40,*blackPen,*redBrush);


Pour un exemple plus complet, voir le chapitre consacré au damier.


Déplacer un élément graphique

Il est nécessaire d'inclure dans l'entête (.h) la bibliothèque de l'objet graphique (GraphicsEllipseItem par exemple)

Le déplacement de l'objet se fait alors avec la méthode setPos :

...

rectangle->setPos(x1,y1);

ellipse->setPost(x2,y2);

Trouver la position d'un objet

La méthode pos restitue la position de l'objet graphique sous forme de point      

  QPointF posCible;

      posCible=cible->pos();

     int posX=posCible.rx();

     int posY=posCible.ry();