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 :

Une question sur les pointeurs

  1. #1
    Membre averti Avatar de Chatbour
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 431
    Points : 305
    Points
    305
    Par défaut Une question sur les pointeurs
    Bonjour à tous et à toutes,

    je débute en Qt et en plus ça fait du temps que je n'ai pas fais du C++. Ma question est en fait sur les pointeurs; Le code suivant déclare une classe qui dérive de QWidget, affichant simplement un bouton qui doit quitter l'application :
    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
    #include <QApplication>
    #include <QPushButton>
    #include <QWidget>
     
    class MyWidget : public QWidget
    {
    public:
    	MyWidget(QWidget *parent = 0);
    };
     
    MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
    {
    	this->setFixedSize(640, 480);
    	// Déclaration d'un pointeur sur un QPushButton
    	QPushButton *quitButton = new QPushButton("Quit!", this);
    	QObject::connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
    	this->show();
    }
     
    int main(int argc, char* argv[])
    {
    	QApplication app(argc, argv);
    	MyWidget mywidg;
     
    	return app.exec();
    }
    Le programme marche très bien. Seulement lorsque je remplace le pointeur sur l'objet QPushButton par un object QPushButton, comme dans le code suivant, le bouton n'est plus affiché :S
    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
    #include <QApplication>
    #include <QPushButton>
    #include <QWidget>
     
    class MyWidget : public QWidget
    {
    public:
    	MyWidget(QWidget *parent = 0);
    };
     
    MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
    {
    	this->setFixedSize(640, 480);
    	// Le pointeur est remplacé maintenant par un objet
    	QPushButton quitButton("Quit!", this);
    	QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
    	this->show();
    }
     
    int main(int argc, char* argv[])
    {
    	QApplication app(argc, argv);
    	MyWidget mywidg;
     
    	return app.exec();
    }
    l'explication serait elle que l'objet QPushButton se détruit automatiquement après l’exécution du constructeur MyWidget ? Cela me dépasse :S

    Merci.

  2. #2
    Membre éprouvé

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    l'explication serait elle que l'objet QPushButton se détruit automatiquement après l’exécution du constructeur MyWidget ? Cela me dépasse :S
    Oui, tout ce qui est déclaré dans un bloc est détruit à la fin du bloc. C'est quelque chose de vrai dans un peu près tous les langages (enfin, parmi ceux que je connais). Dans ton exemple, ton pointeur est détruit à la fin de l'accolade, par contre, l'objet qu'il pointait est lui toujours existant. En lui donnant comme parent 'this', c'est ton QWidget parent qui sauvegarde automatiquement un pointeur sur cet objet, et qui s'occupera de sa suppression lorsque son propre destructeur sera appelé.

    Pour toujours garder des références valides sur les sous objets de ta classe, déclare les en membres de ta classe.

    G.

  3. #3
    Membre averti Avatar de Chatbour
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 431
    Points : 305
    Points
    305
    Par défaut
    je vois. Merci bien Gulish

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

Discussions similaires

  1. une petite question sur les pointeurs
    Par guy777 dans le forum C
    Réponses: 4
    Dernier message: 06/10/2006, 17h44
  2. une question sur les includes comportement bizard
    Par e-m.guillaume dans le forum Langage
    Réponses: 2
    Dernier message: 24/02/2006, 21h12
  3. [Debutant] Nouvelle question sur les pointeurs
    Par etiennegaloup dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2006, 09h55
  4. Question sur les pointeurs.
    Par Chrisemi dans le forum C++
    Réponses: 5
    Dernier message: 28/10/2005, 23h47
  5. questions sur les pointeurs
    Par Hyoga dans le forum C++
    Réponses: 17
    Dernier message: 08/01/2005, 23h25

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