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 chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 865
    Points
    1 865
    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 sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    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

  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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    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 sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    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

  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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    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