Bonsoir tout le monde,
Je rencontre actuellement un problème d'affichage dans mon QGraphicsView. Pour mieux cerner le problème, je vous propose une "pseudo-simulation" de l'application :
1) après un clic sur la Vue, un objet Croix dérivé d'un QGraphicsItem dans lequel j'ai redéfini paint() et boundingrec() et qui possède comme attribut un QPoint représentant le point central de la croix dans la vue est créée dans la vue à l'endroit cliqué.
2) lors d'un clic à l'emplacement de la Croix, la possibilité de Sélection et de Mouvement de la croix est activée avec setFlag().
3) Lors du déplacement de la souris (mouseMoveEvent() réimplémentée dans Vue), pour la Croix selectionnée, j'appelle une méthode qui permet de déplacer la croix grâce à setPos(dx, dy) avec dx et dy la distance parcouru entre sa position antérieure et le déplacement du curseur de souris.
4) Après un nouveau clic, la Croix est "déposée" à l'endroit cliqué en désactivant la sélection et le mouvement de celle-ci (désactivation des flags).
Je dois cependant prendre en compte, la nouvelle position du Point, attribut de la Croix. J'appelle donc :
5) Enfin, pour voir la nouvelle position du point, je fais un qDebug() avec un getPoint. La position du point a bien changé mais là, la Croix ne s'affiche plus dans la Vue :s
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void Croix::setPoint(double x, double y) { prepareGeometryChange() ; this->p.setX(x); this->p.setY(y); this->update(); }
6) Par contre, après un clic au nouvel endroit ou a été déplacé le point attribut de ma Croix (endroit ou la Croix n'apparaît donc pas), la Croix peut à nouveau être selectionnée et déplacée et est visible !
Voici finalement les deux méthodes réimplémentées dans Croix pour que vous puissiez comprendre le lien entre l'item Croix et le point attribut :
Si vous avez une idée du problème d'affichage de ma croix n'hésitez pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 // Dessine deux segments pour la croix : void Croix::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { painter->drawLine(p.x()-5, p.y(), p.x()+5, p.y()); painter->drawLine(p.x(), p.y()-5, p.x(), p.y()+5); } QRectF Croix::boundingRect() const { return QRectF(p.x()-5, p.y()-5, p.x()+5, p.y()+5); }
J'ai pour ma part deux idées pour l'instant que je vais étudier :
- Problème d'affichage de la Vue. Il me manque peut être une étape pour redessiner la Croix.
- Problème de "redondance" avec setPos() d'abord pour déplacer la Croix et setPoint() ensuite pour changer la valeur de l'attribut point de la Croix (le point central étant déjà lié au dessin de la croix(présence des coordonnées dans paint() par exemple)).
Merci beaucoup !
Partager