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 :

QGraphicsView ne s'affiche pas dans un widget


Sujet :

Qt

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Points : 30
    Points
    30
    Par défaut QGraphicsView ne s'affiche pas dans un widget
    Bonjour,


    J'ai un code qui affiche des trucs à l'aide d'un QGraphicsView (et d'un QGraphicsScene)
    Bref tout marche bien.

    Mais j'ai décidé d'inclure le QGraphicsView dans un QWidget (qui me sert donc de fenêtre), mais le QGraphicsView ne s'affiche pas dans le widget, j'ai juste une fenêtre vide...

    voila le code concerné:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include "Fenetre.h"
    #include "Scene.h"
     
    Fenetre::Fenetre(QWidget *parent) : QWidget(parent)
    {
        Scene scene(this);
        scene.setSceneRect(0.0, 0.0, 500, 500);
        scene.setBackgroundBrush(Qt::white);
     
     
        QPushButton *quitter = new QPushButton("Quitter", this);
        connect(quitter, SIGNAL(clicked()), qApp, SLOT(quit()));
     
       QGridLayout *layoutPrincipale = new QGridLayout;
       QHBoxLayout *layoutBouton = new QHBoxLayout;
     
     
     
     
        QTimer *timer = new QTimer();
        QObject::connect(timer, SIGNAL(timeout()), &scene, SLOT(advance()));
        timer->start(20);
     
        QGraphicsView vueScene(&scene, this);
        vueScene.show();
     
     
      layoutBouton->addWidget(quitter);
        layoutPrincipale->addLayout(layoutBouton,0,0 );
        layoutPrincipale->addWidget(&vueScene,1 ,0);
        layoutPrincipale->setRowStretch(1,10);
        layoutBouton->addStretch(0);
     
     
     
       setLayout(layoutPrincipale);
     
     
    }
    merci de votre aide.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour

    Quand tu regardes la doc de QGraphicsView, tu peux voir que cette classe hérite de QWiget.

    Donc, tu peux :

    - afficher ta vue comme une fenêtre en ne lui donnant pas de parent et en appelant le fonction show()

    - l'intégrer dans un autre widget en lui donnant le widget comme parent et utiliser setCentralWidget (si tu n'as qu'un seul widget) ou utiliser des QLayout avec addWidget().

    Ici, tu mélanges les 2 : tu donnes un parent et tu appelles show(). Utilises à la place addWidget() pour l'intégrer à ton layout.

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Second problème (j'ai testé le code et il y avait une erreur que je n'avais pas vue) :

    tu crées ta vue en tant qu'objet et non en tant que pointeur : en sortie du constructeur, ta vue est détruite ! (idem pour la scène)

    Le code devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Scene scene = new Scene(this);
    (...)
    QGraphicsView* vueScene = new QGraphicsView(scene, this);
    (...)
    layoutPrincipale->addWidget(vueScene, 1 , 0);
    EDIT : code corrigé, cf messages en dessous

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Points : 30
    Points
    30
    Par défaut
    Merci beaucoup.


    Explications claire, et rapide

    Par contre je suis obligé d'indiquer un parent à ma scène, mais pas à ma view ? c'est un peu bizarre quand meme.

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Oups

    Un petit oubli de ma part (mais sans conséquence pour le résultat).

    Comme je l'ai indiqué au dessus, pour afficher un widget dans une fenêtre séparée, il ne faut pas donner de parent et utiliser la fonction show().

    Pour un widget intégré dans un autre, il faut lui donner le parent dans le constructeur ou avec setParent() (cela permet que les widgets enfant soient détruit par exemple lors de la destruction du parent, ou d'autres choses pratiques)...

    La petite astuce ici est que QLayout::addWidget() fait appelle à setParent() pour redéfinir le conteneur comme nouveau parent. Donc l'oubli n'est pas grave (et souvent volontaire, cf le code des exemples de Qt)

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/07/2015, 10h53
  2. Icone ne s'affichant pas dans la barre de titre
    Par Spartan03 dans le forum Windows
    Réponses: 22
    Dernier message: 05/11/2005, 14h57
  3. [CSS][IE]background d'affiche pas dans div sur IE
    Par Thomzz dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 21/09/2005, 23h32
  4. Noms des colonnes ne s'affichent pas dans un JTable
    Par Bourdet dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 07/07/2005, 15h26
  5. Une valeur ne s'affiche pas dans un champ texte
    Par KibitO dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/03/2005, 20h42

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