Bonjour à tous j'ai un petit problème et malgré avoir relu la documentation de Qt je n'arrive pas à trouver la solution.

Le problème est que j'ai une image de type QPixmap qui est affiché dans une scène via QGraphicsScene. Jusque là pas de soucis mon image est bien affiché.
Je voudrais pour sélectionner une partie de mon image grâce à un rectangle et que la sélection que j'ai effectué remplace mon image préalablement chargé.
Je suis passé par la fonction QRubberBand de Qt dont voici la doc : http://doc.qt.io/qt-5/qrubberband.html

En fait j'ai une classe à part entière nommé Outil (ou je fais des dessins sur mon image et ou je voudrais faire ma sélection) et une autre classe Window ou j'affiche mon image.

Deux problèmes se pose lorsque je clique sur ma fenêtre ou se trouve l'image le cadre apparaît bien mais pas au niveau du clique de la souris déjà il y a un problème de mapping au niveau des coordonnées (pourtant j'ai utilisé mapToScene, mapFromScene...).
Le deuxième point est que j'ai l'impression que la copie de la partie de mon image sélectionné ne se fait pas correctement....

Je vous mets le code de la classe outils :

.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
class Outils : public QObject, public QGraphicsPixmapItem {
 
    Q_OBJECT
 
    protected:
        void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
        void mousePressEvent(QGraphicsSceneMouseEvent *event);
        void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
 
    private:
       bool selection;
       QRubberBand *rubber{Q_NULLPTR};
       QPoint premierPoint;
};
#endif
.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
void Outils::mouseMoveEvent(QGraphicsSceneMouseEvent *event){
    if(selection){
 
         rubber->setGeometry(QRect(premierPoint,event->scenePos().toPoint()).normalized());
 
}
 
 
void Outils::mousePressEvent(QGraphicsSceneMouseEvent *event){
   if(selection){
 
       premierPoint=event->scenePos().toPoint();
 
        if(!rubber){
            rubber=new QRubberBand(QRubberBand::Rectangle);
        }
 
        rubber->setGeometry(QRect(premierPoint,QSize()));
        rubber->show();
    }
}
 
void Outils::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){
 
    if(selection){
 
 
        QRect rect(premierPoint,event->scenePos().toPoint());
 
        //polygon dans la scene
        QPolygonF polyScene=mapFromScene(rect);
 
        //Polygon dans l'item
        QPolygonF polyItem=this->mapFromScene(polyScene.boundingRect());
 
        QRect RectTailleMax = polyItem.boundingRect().toRect();
 
        RectTailleMax.setX(0);
        RectTailleMax.setWidth(this->pixmap().width());
 
        QPixmap finalpixmap = this->pixmap().copy(RectTailleMax);
 
        this->setPixmap(finalpixmap);
 
        rubberband->hide();
 
    }
}
Si jamais quelqu'un a déjà utiliser cette fonction je suis preneur pour quelques explications