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 :

Problème d'initialisation de pointeur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Par défaut Problème d'initialisation de pointeur
    Bonjour à tous,

    j'ai un petit problème que je ne comprend pas.
    Dans la classe j'ai déclaré 4 pointeurs sur des QLabels
    et j'ai une fonction appelée quelque part dans mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void TBI::afficher_masque(int x, int y, int w, int h) {
    m_testmask_1 = new QLabel(contenant);
    m_testmask_1->setPixmap(QPixmap(QString::fromUtf8("img_menu/gris_mask.png")));
    m_testmask_1->setGeometry(0,0,1024,y);
    }
    En plaçant une QMessageBox je vois bien que ma fonction est exécutée seulement mon QLabel n'apparait pas. Alors que si j'initialise mon pointeur dans le constructeur de ma classe, l'image s'affiche.

  2. #2
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    Salut, t'as essayé un petit update() pour rafraîchir l'affichage ?
    Es-tu sûr d'où se positionne ton QLabel ?
    Es-tu sûr de ton setGeometry ?

    note: tu n'est pas obligé d'utiliser une QMessageBox pour 'debugger', tu peux simplement utiliser qDebug

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void TBI::afficher_masque(int x, int y, int w, int h) {
    qDebug("Arrive dans la fonction\n");
    qDebug() << "y vaut :" << y;
    m_testmask_1 = new QLabel(contenant);
    m_testmask_1->setPixmap(QPixmap(QString::fromUtf8("img_menu/gris_mask.png")));
    m_testmask_1->setGeometry(0,0,1024,y);
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Par défaut
    je ne connaissais ni update() ni qDebug
    Pour qDebug je vais regarder comment récupérer les messages sous Windows, j'ai vu que sous Unix ça écrit dans stderr mais sous windows j'ai pas bien saisi comment l'utiliser
    J'ai tenté après avoir positionné mes labels de faire un update mais ça ne donne rien.
    Le setGeometry fonctionne car si dans le constructeur j'initialise mes labels et que je leur fait un setGeometry(0,0,0,0) lors du passage dans ma fonction (après avoir commenté le new et le setpixmap) j'ai bien l'apparition de mon label

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Prenons les problèmes un par un.

    Déjà, avant d'essayer de charger une image, essaie simplement de mettre du texte dans ton QLabel. Une erreur dans le chargement d'image pourrait tout simplement charger "rien du tout", et réduire la taille de ton label à 0, ou encore de lui mettre aucun contenu. Essaie donc en mettant simplement du texte, et sans toucher à la géométrie.

    Si ça marche pas, vérifie que ton parent ("contenant") soit lui même visible ( show()), sinon ses enfants ne s'afficheront jamais.

    Si ça marche, essaie de changer la géométrie.

    Ensuite, si cela marche avec du texte, essai de charger une image se trouvant dans le dossier courant de ton application. De cette façon, tu pourras traiter les erreurs une à une.

    Pour le QDebug sous windows, ajoute dans ton .pro : Cela lancera une console en même temps que ton application, et les messages de QDebug s'afficheront dedans.

    BOnne chance,

    G.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Par défaut
    Merci pour le petit ajout dans le .pro c'est bien pratique ça m'évite de passer par gdb.

    mon widget contenant est visible, c'est le widget central de ma fenêtre et qui est le parent des mes widgets principaux (dont d'autres labels visibles).

    Même si je ne mets que du texte ou que j'essaie juste de charger l'image il ne se passe rien. C'est comme si mon new ne fonctionnait pas ailleurs que dans le constructeur de ma classe, je ne comprend pas.

    C'est assez simple pourtant, j'ai un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void TBI::mouseReleaseEvent(QMouseEvent* event) {
        // un petit traitement pour avoir des valeurs correctes dans mes variables et d'autres traitements pour d'autres cas
        afficher_masque(m_x,m_y,weigh,hei);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void TBI::afficher_masque(int x, int y, int w, int h) {
    qDebug("Arrive dans la fonction affiche\n");
    m_testmask_1 = new QLabel(contenant);
    m_testmask_1->setPixmap(QPixmap(QString::fromUtf8("img_menu/gris_mask.png")));
    m_testmask_1->setGeometry(0,0,1024,y);
    qDebug()<< "y vaut :" << y << " x vaut :" << x << " w vaut :" << w << "h vaut :" << h;
    Et je vois bien que ma fonction est exécutée et que les valeurs sont correctes. Si je fais le new et le setpixmap dans le constructeur de ma classe, le setgeometry de ma fonction marche mais c'est pas terrible.
    Y aurait-il un problème de portée de variable ou ce genre de chose ?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Y aurait-il un problème de portée de variable ou ce genre de chose ?
    Possible, pour la variable "contenant".

    De quel type est cette variable ? Y'a t'il un layout ? Utilise tu une QMainWindow ?

    Si ce n'est pas confidentiel, tu peux fournir un code compilable de ton erreur, afin de tester nous mêmes. J'ai du temps aujourd'hui.

    G.

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

Discussions similaires

  1. Problème d'initialisation de pointeur
    Par boubinou dans le forum C
    Réponses: 8
    Dernier message: 16/12/2008, 18h35
  2. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30
  3. Réponses: 4
    Dernier message: 08/02/2005, 20h47
  4. Pitié, aidez moi : Problème d'initialisation de postgreSQL
    Par ttalourd dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 16/11/2004, 12h10
  5. Initialisation de pointeurs
    Par Gnux dans le forum C
    Réponses: 5
    Dernier message: 03/10/2003, 17h10

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