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 :

Position de QGraphicsItem

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 270
    Par défaut Position de QGraphicsItem
    Bonjour,

    J'ai un problème de compréhension de la gestion des coordonnées dans un qgraphicsview.

    J'ai crée une classe myview dérivée de qgraphicsview dans laquelle j"ai réécrit mousePressEvent, mouReleaseEvent, et mousMoveEvent ( je précises au cas ou ça a une importance mais je ne pense pas ).

    Mon qgraphicsView contient une image. Voici le code d'init de ma vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      scene = new QGraphicsScene();
      view = new myview(scene);
         QPixmap pix=QPixmap::fromImage(image);
          img_fond=scene->addPixmap(pix);
          view->setScene(scene);
          view->fitInView(scene->sceneRect());
    Lors d'un clic sur un bouton ( hors du qgraphicsview ), je dessine un rectangle via le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        QGraphicsRectItem* ajout_rectangle = new  GraphicsRectItem(QRectF(100,100,100,100));
        ajout_rectangle->setPen(Qt::NoPen);   ajout_rectangle->setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
        ajout_rectangle->setBrush(QBrush(Qt::black));
        scene->addItem(ajout_rectangle);
    J'ai aussi une fonction qui trace une droite une fois un bouton cliqué ( avec utilisation de mousPrressEvent, mouseMoevent, et mouseReleaseEvent pour son tracé )

    Je n'arrive pas à avoir les coordonnées des différents élements.

    Voici le code que j'utilise :

    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
     
      QList<QGraphicsItem *> items=scene->items();
      for (int boucle=0;boucle<items.count();++boucle)
      {
        switch(items.at(boucle)->type())
        {
          case 3:
           qDebug()<<"qgraphicsPixmap";
           break;
          case 6:
           qDebug()<<"qgraphicsLine";
           break;
          case 7:
           qDebug()<<"qgraphicsrect";
           break;
        }
        qDebug()<<"  "<<items.at(boucle)->pos()<<items.at(boucle)->scenePos();
      }
    Dans les tous les cas, pos et scenePos me retournent (0,0)

    J'ai besoin de récuperer les coordonnées des différents QGraphicsItem afin de sauvegarder ma scene.

    Merci pour votre aide.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 132
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Ne voulez vous pas simplement utiliser pos() ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 270
    Par défaut scenePos
    Je veux bien LittleWhite, le problème c'est que ça me retourne également 0.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 270
    Par défaut Voila la solution
    J'ai la solution.

    au lieu de déclarer mon item comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QGraphicsRectItem* ajout_rectangle = new QGraphicsRectItem(100,100,100,100);
    ajout_rectangle->setPen(Qt::NoPen);
     ajout_rectangle->setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
        ajout_rectangle->setBrush(QBrush(Qt::black));
        scene->addItem(ajout_rectangle);
    J'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    QGraphicsRectItem* ajout_rectangle = new QGraphicsRectItem(0,0,100,100);
    ajout_rectangle->setPos(100,100);
    ajout_rectangle->setPen(Qt::NoPen);
     ajout_rectangle->setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
        ajout_rectangle->setBrush(QBrush(Qt::black));
        scene->addItem(ajout_rectangle);
    J'ai trouvé ça sur le web. d'après ce que j'ai compris, lors de l'instanciation du graphicsItem, les données renseignés sont en rapport avec le père, je peux pas mieux expliquer, j'ai pas le niveau.
    Le truc que je pige pas c'est que le setPos est fait avant l'affection au père par scene->addItem(); C'est la sauce interne de l'item.

    Ceci m'a un peu aidé à mieux comprendre le système de coordonnés :

    http://www.developpez.net/forums/d10...t-coordonnees/

    Avec la pratique ça sera plus clair.

    Spéciale dédicace à Gbdivers, l'auteur de la réponse dans le lien, qui m'a déjà aidé plusieurs fois tout comme à toi/vous LittleWhite.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

Discussions similaires

  1. [Graphics View] recuperer une nouvelle position d'un QgraphicsItem apres moveBy()
    Par scoutiste dans le forum Débuter
    Réponses: 0
    Dernier message: 15/01/2014, 14h17
  2. [XSLT]position d'un element de valeur specifique
    Par squat dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 25/07/2002, 16h42
  3. Position du curseur dans Edit
    Par MrJéjé dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 17h09
  4. Réponses: 2
    Dernier message: 17/05/2002, 20h37
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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