Rotation de QGraphicscene
Bonsoir,
J'ai des soucis pour faire 1 rotation d'une QGraphicsScene.
J'ai une QGraphicsPixmapitem, 1 QGraphicsRectitem, et 2 QGraphicsLine.
Mon QGraphicsRectItem est déclaré comme ceci :
Code:
1 2 3 4 5
|
QGraphicsRectItem* ajout_rectangle = new QGraphicsRectItem(0,0,100,100);
ajout_rectangle->setPos(50,50);
ajout_rectangle->setBrush(QBrush(Qt::black)); ajout_rectangle->setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
scene->addItem(ajout_rectangle); |
Même principe pour mes QGraphicsLineItem.
J'arrive à effectuer 1 rotation du QGraphicsPixmapItem comme ceci :
Code:
1 2 3 4 5
|
img=item->pixmap().toImage();
QTransform t;
QImage img2 = img.transformed(t.rotate(rot));
item->setPixmap(QPixmap::fromImage(img2)); |
Pour le QGraphicsRectItem et les QGraphicsLineItem je fais ça :
Code:
1 2 3
|
item->setTransformOriginPoint(item->pos());
item->setRotation(90); |
Je ne vois plus les items ( hors view je pense ), si je ne met pas setTransformpoint, je vois toujours le rectangle
Merci pour votre aide.
la solution que j'ai utilisé
Voici la solution que j'ai utilisé, si ça peut aider quelqu'un d'autre.
Je suis passé par un QPainter.
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
int longueur=scene->sceneRect().width();
int largeur=scene->sceneRect().height();
img=QImage(longueur,largeur,QImage::Format_ARGB32);
QPainter painter(&img);
scene->render(&painter);
QTransform t;
img2 = img.transformed(t.rotate(rot));
scene->setSceneRect(0,0,largeur,longueur);
scene->clear();
scene->addPixmap(QPixmap::fromImage(img2)); |
Explications :
- Je crée une QImage img aux dimensions de la scene
- Je récupère le contenu de la scene dedans avec render dans le QPainter
- je crée 1 nouvelle image img2 avec rotation à l'aide de QTransform
- je modifie la taille de la scene en inversant la longueur et la largeur
- je vide ma scene et y insère ma nouvelle image
Je ne peux plus modifier par exemple les QGraphicsLineItems ou les QRectItems, ceux-ci ayant été "intégrés" à l'image.
Le résultat obtenu me convient.