IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Compréhension de la méthode paint()

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 74
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 74
    Par défaut
    n'ayant pas de réponse je vais essayer de reformuler un peu mon probleme

    j'ai une classe GPoint qui hérite de QGraphicsItem. Cette classe GPoint a un un attribut 'point' de type QPointF.

    pour créer ses propres QGraphicsItem il faut ré-implémenter la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
    ce que je fais ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    painter->drawRect(QRectF(point.x() - size/2, point.y() - size/2, size, size ));
    //size est la taille du carré que je veux dessiner
    je trace donc quelquechose qui dépend uniquement de l'attribut point propre à GPoint, et pas du tout des coordonnées x,y de QGraphicsItem (ces x,y représentent la position du coin top left de l'objet).
    A l'affichage tout se passe bien, mes points sont dessinés au bon endroit.
    Ce que je ne comprend c'est que quand j'essaye de déplacer un point à la souris, ça fonctionne. En effet les fonctions type mouse(Move | Press | Release)Event ne touchent absolument pas à l'attribut point de GPoint !!

    Est ce que c'est un probleme de map(To | From)Scene ou quelque chose dans ce genre là ?

    Merci pour toute piste que vous pourriez me donner

Discussions similaires

  1. contexte graphique (méthode paint)
    Par Akhan dans le forum AWT/Swing
    Réponses: 17
    Dernier message: 04/09/2006, 11h49
  2. Réponses: 11
    Dernier message: 31/05/2006, 22h47
  3. problème de méthode paint()
    Par guillaumeM63 dans le forum 2D
    Réponses: 2
    Dernier message: 16/05/2006, 23h50
  4. [JButton]Redéfinir la méthode paint(), colorer le fond.
    Par leminipouce dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 23/01/2006, 15h51
  5. [AWT] Peut-on choisir de lancer la méthode paint()
    Par noobiewan kenobi dans le forum Débuter
    Réponses: 16
    Dernier message: 28/07/2005, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo