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 :

Quand utiliser les pointeurs ?


Sujet :

Qt

  1. #1
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut Quand utiliser les pointeurs ?
    Hello ,
    je commence a developper avec Qt , mais j'ai une question , Quand utiliser les pointeurs ?

    par exemple ici :
    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
     #include <QApplication>
     #include <QFont>
     #include <QPushButton>
     #include <QWidget>
     
     class MyWidget : public QWidget
     {
     public:
         MyWidget(QWidget *parent = 0);
     };
     
     MyWidget::MyWidget(QWidget *parent)
         : QWidget(parent)
     {
         setFixedSize(200, 120);
     
         QPushButton *quit = new QPushButton(tr("Quit"), this);
         quit->setGeometry(62, 40, 75, 30);
         quit->setFont(QFont("Times", 18, QFont::Bold));
     
         connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
     }
     
     int main(int argc, char *argv[])
     {
         QApplication app(argc, argv);
         MyWidget widget;
         widget.show();
         return app.exec();
     }
    pourquoi quit est un pointeur et pas app ?
    merci

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Déjà, je me pose réellement la question de savoir s'il n'y aurait pas intérêt à créer ton bouton en tant que membre de MyWidget sous une forme proche de
    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
     class MyWidget : public QWidget
    {
        public:
            MyWidget(QWidget *parent = 0);
        private:
            QPushButton *quit;
     };
     MyWidget::MyWidget(QWidget *parent)
         : QWidget(parent)
     {
         setFixedSize(200, 120);
     
         quit = new QPushButton(tr("Quit"), this);
         quit->setGeometry(62, 40, 75, 30);
         quit->setFont(QFont("Times", 18, QFont::Bold));
     
         connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
     }
    Je crains en effet (je peux me tromper lourdement, mais je n'en ai pas l'impression) que si tu ne déclare pas le bouton en tant que membre, tu n'en perde l'accès une fois le constructeur quitté...

    Pour répondre à ta question de base, je dirais "simplement" que c'est parce que app a une durée de vie qui s'étend de toutes manière à toute l'application, vu qu'il est créé dans la fonction principale.

    Par contre, les boutons et tout ce que tu peux décider de placer dans un type MyWidget est très fortement susceptible d'apparaître et de disparaître à ton gré...

    Or, le seul moyen encore réellement sur de s'assurer de l'existence d'un objet est... de voir s'il utilise une adresse mémoire, et donc... de travailler avec un pointeur sur l'élément

    [EDIT]En fait l'occurence app est créée d'office, alors que ce que peut contenir app est laissé à ton appréciation
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ce que dit koala pour app est juste, pour le widget un peu moins, je vais m'expliquer.

    Qt gère une arborescence de fenêtres et quand tu crées un bouton dans une fenêtre, tu indiques au constructeur du bouton qui va être le père -> ta fenêtre (c'est le this dans ton constructeur). Cela indique aussi que c'est la fenêtre qui gère la durée de vie du bouton et qui l'effacera. Si tu utilises une valeur plutôt qu'un pointeur, d'une part dans ton constructeur de la fenêtre, le bouton va apparaître puis disparaître, mais si tu le laisses comme variable membre, tu risques de rencontrer un problème lors de la destruction de la fenêtre (je ne sais plus si le destructeur de la fenêtre est appelé avant le destructeur des variables membres, mais il me semble, et cela va mener à un delete qui va crasher le programme).
    De plus, tous les mécanismes de Qt fonctionnent avec des pointeurs (signaux et slots, ...), ça évite aussi de ne pas se perdre.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Miles Voir le message
    ça évite aussi de ne pas se perdre.
    Fais attention au double négations:
    Ca évite de ne pas se perdre, ca veut dire qu'on se perd d'office
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Faut que je retourne me coucher, c'est clair

Discussions similaires

  1. [EJB3] Quand utiliser les ejb ?
    Par tastika dans le forum Java EE
    Réponses: 5
    Dernier message: 04/03/2009, 16h57
  2. Réponses: 8
    Dernier message: 13/11/2008, 21h28
  3. Comment utiliser les pointeurs
    Par jeje86 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/08/2008, 13h24
  4. [POO] Quand utiliser les Exceptions?
    Par ChriGoLioNaDor dans le forum Langage
    Réponses: 2
    Dernier message: 20/06/2007, 08h40
  5. quand utiliser les modules de classe
    Par borislotte dans le forum Access
    Réponses: 3
    Dernier message: 02/03/2007, 14h56

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