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

Qt Discussion :

Positionnement "étrange" des QGraphicsItem [Graphics View]


Sujet :

Qt

  1. #1
    Membre éclairé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Par défaut Positionnement "étrange" des QGraphicsItem
    Bonjour à tous,

    J'essaie de m'initier à Qt, ici en essayant de faire une application 2D...
    Voici le bout de code qui me pose problème :

    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
    19
    20
    21
    22
    23
     
    #include <QApplication>
    #include <QtGui>
     
    int main(int argc, char *argv[])
    {
    	QApplication app(argc, argv);
     
    	QGraphicsScene scene;
    	QGraphicsItem *item;
    	QPixmap image;
     
    	image.load("bonhomme.png", 0, Qt::AutoColor);
    	item = scene.addPixmap(image);
    	item->setPos(50,50);
     
    	QGraphicsView vue(&scene);
    	vue.setFixedSize(250, 250);
    	vue.setWindowTitle("J'utilise QGraphicsItem !");
    	vue.show();
     
    	return app.exec();
    }
    et ce code est censé afficher une image, et la décaler de de son origine (qui est censée se trouver au centre de l'écran par défaut).

    Le seul inconvénient de ce code, et bien c'est qu'il ne décale pas l'image
    Regardez :


    Après divers tests, je me suis rendu comtpe que mon image était bien déplacée... mais que mon origine aussi !

    La preuve avec ce code-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //mêmes trucs qu'avant
    //...
     
    image.load("bonhomme.png", 0, Qt::AutoColor);
    item = scene.addPixmap(image);
    image2.load("bonhomme.png", 0, Qt::AutoColor);
    item2 = scene.addPixmap(image2);
    item->setPos(0,0);
    item2->setPos(100,100);
    //Donc en gros, je ne bouge pas la première, mais je déplace la seconde
     
    //...
    //mêmes trucs qu'avant
    Ce qui donne pour résultat :

    Et donc, puisque la première image (en haut à gauche je pense) n'a pas été bougée (par le code), on peut en conclure que c'est l'origine qui a été bougée (par la réalité)... De toute manière l'écart entre les 2 images est bien de 100,100 mais l'origine c'est déplacée de (-100/2 , -100/2)...

    Je précise qu'il n'y a pas que les images qui sont concernées, mais tous les objets "de base" aussi, rectangles, polygones, lignes, text...

    Comment est-ce que je peux "fixer" l'origine ? Et premièrement, comment se fait-il qu'elle bouge ?????

    Le pire, mais vraiment le truc le plus grave () c'est que en essayant ce code sur une autre machine, et bien... Ca marche nickel...
    WTF ? Un problème de configuration de Qt ? Je précise que j'utilise QtCreator, sur une plateforme Windows... la machine sur laquelle ça marche aussi...
    Je sèche :/

    Merci d'avance à tous ceux qui voudront bien m'éclairer

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Tu est sur que ce n'est pas plutôt la zone d'affichage su QgraphicsView qui n'est pas centré au même endroit?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Par défaut
    Je pense que ça vient du fait que ta scene n'as pas de taille fixe (setSceneRect dans QGraphicsView ou QGraphicsScene).
    La scene s'élargie selon l'espace occupé par les items, et la vue s'adapte. Tu pourrais le constater en déplaçant à la souris ton item (item.setFlag(QGraphicsItem::ItemIsMovable)).
    Le centre ne bouge pas, [0,0] reste [0,0], le viewport de la vue en revanche s'adapte...

    En fixant la taille de la scene, normalement la vue tentera de center constament le sceneRect (notament lors des zoom (méthode scale()).

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

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