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 :

Réaffichage d'un QGraphicsItem déplacé

  1. #1
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut Réaffichage d'un QGraphicsItem déplacé
    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 :

    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();
    }
    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

    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 :

    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);
    }
    Si vous avez une idée du problème d'affichage de ma croix n'hésitez pas

    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 !

  2. #2
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Je up le post pour apporter la solution du problème pour ceux qui sont intéressés

    Ma deuxième idée était en effet la bonne. sePos() qui permettait de faire translater ma Croix lors du déplacement de la souris après un premier clic fonctionne bien, mais ensuite, accompagné d'un setPoint pour apporter la nouvelle position du point, ça ne colle pas.

    La raison doit être que le point fait déjà référence à ma Croix. Donc il suffit de remplacer le setPos lors du déplacement par un setPoint !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AWT] probleme de réaffichage
    Par thomasletiers dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 19/01/2005, 15h23
  2. Problème de réaffichage d'image
    Par benj63 dans le forum C++Builder
    Réponses: 2
    Dernier message: 09/12/2004, 09h41
  3. Comment déplacé un index de tablespace?
    Par superfly dans le forum Administration
    Réponses: 4
    Dernier message: 10/08/2004, 13h56
  4. Pb scintillement-stabilité lors réaffichage de JPanel
    Par Pill_S dans le forum Composants
    Réponses: 5
    Dernier message: 28/04/2004, 14h03
  5. [ JSP ] Réaffichage des données d'un formulaire apres un ret
    Par captainpouet dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 23/04/2004, 11h55

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