Compréhension de la méthode paint()
Bonjour à tous
je ne comprend pas bien le comportement de la methode paint des QGraphicsItem. J'explique mon problème :
Je voudrais afficher un graph assez basique pour l'instant, des arcs et des sommets. J'ai une classe qui herite de QGraphicsView et qui contient une QGraphicsScene (déjà ça je sais pas trop si c'est une bonne idée ? )
J'ai également 2 classes qui héritent QGraphicsItem : GPoint (le G est pour Graphic bande de petits polissons) et GArc
Ma classe GPoint a un QPointF en attribut pour garder les coordonnées du point à afficher, GArc a 2 attributs GPoint, les 2 sommets de l'arc
Les headers allégés des classes:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
class GPoint : public QGraphicsItem
{
//ATTRIBUTS
public:
QPointF point; //coordonnées 2D
float size; //taille du point à l'écran
//METHODES
public:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
void mousePressEvent(QGraphicsSceneMouseEvent* event);
void mouseMoveEvent(QGraphicsSceneMouseEvent* event);
}; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
class GArc : public QGraphicsItem
{
//ATTRIBUTS
public:
GPoint* ini;
GPoint* fin;
//METHODES
public:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
}; |
Pour mes sommets je dessine des carrés centrés sur 'point', et pour les arcs je trace des lignes qui utilisent les 'point' de 'ini' et 'fin'.
les méthodes paint:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
void GPoint::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->drawRect(QRectF(point.x()-size/2, point.y()-size/2, size, size ));
}
void GArc::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->drawLine(ini->getPoint(), fin->getPoint());
} |
L'affichage est correct, le problème survient quand je veux déplacer mes points. Je voudrais bêtement que quand je déplace un point l'arc soit retracé avec les nouvelles coordonnées du sommet.
Ma méthode GPoint::paint(...) utilise a priori uniquement les coordonnées de 'point' pour faire le tracé. Ce que je ne comprends pas c'est que dans ma méthode mouseMoveEvent, même si je ne modifie absolument pas les coordonnées de 'point', je peux tout de même déplacer le point à l'écran. Comme si paint() utilisait les coordonnées du QGraphicsItem (y a des méthodes x(), setX() etc... pour cette classe) pour afficher mon GPoint !
est ce que quelqu'un pourrait m'aider à éclaircir ce mystère ?! Parce que là tout ce que je tente de faire dans mes mouseEvent a un comportement qui m'apparait comme complètement aléatoire...
merci beaucoup à ceux qui prendront la peine de déchiffrer tout ça, hésitez pas à demander des clarifications.