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

GTK+ avec C & C++ Discussion :

Passage pointeur widget dans fonction


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Points : 31
    Points
    31
    Par défaut Passage pointeur widget dans fonction
    Bonjour,

    Souci lors du passage d'un pointeur de widget dans une fonction, afin de créer ma fenêtre principale de l'application. Le premier problème apparait lors de l'ajout de pTable dans la MainWindow, c'est à dire que je ne dois sans doute pas récupérer correctement mon pointeur MainWindow.

    Merci pour votre aide.

    Fr

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void creer_fenetre_principale()
    {
        GtkWidget * MainWindow = NULL;
        [...]
        create_basic_window(MainWindow);
     
        pTable=gtk_table_new(3,3,TRUE);
     
        gtk_container_add(GTK_CONTAINER(MainWindow), GTK_WIDGET(pTable));
        [...]
        gtk_widget_show_all(MainWindow);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void create_basic_window(GtkWidget * window)
    {
         /* Création de la fenêtre */
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(window), "Fenetre");
        gtk_window_set_default_size(GTK_WINDOW(window), 600, 400);
     
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
     
     
        g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
     
    }

  2. #2
    Membre actif Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Points : 221
    Points
    221
    Par défaut
    Quand tu veux modifier une variable dans un appel de fonction, tu fais un passage par adresse. Eh bien pour un pointeur, c'est pareil vu qu'un pointeur est une variable.

    Donc, quand tu passe ton GtkWindow* à ta fonction create_basic_window, celui-ci n'est pas modifié. Il faut que tu fasses un passage par adresse

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 296
    Points : 4 949
    Points
    4 949
    Billets dans le blog
    5
    Par défaut
    Mais qui a inventé les pointeurs ?

    Alors traduisons ton code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GtkWidget * MainWindow = NULL;
    Ici le pointeur vaut NULL. Bon rien de bien méchant. Ensuite tu passes cette valeur à la fonction create_basic_window(MainWindow);.
    Dans cette fonction tu initialises le pointeur transmis. Le problème est que tu donnes une nouvelle adresse à MainWindow. Donc lors du retour à la fonction principale ton pointeur ne pointe plus à la même adresse.

    Alors comment résoudre c'est épineux problème? Simplement en transmettant l'adresse du pointeur. Et oui, un pointeur est une adresse sur un objet. Mais il est possible de donner l'adresse de l'adresse d'un objet. Aie, ca y est, en y a qui ont mal à la tête .

    En résumé il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void creer_fenetre_principale()
    {
        GtkWidget * MainWindow = NULL;
        [...]
        create_basic_window(&MainWindow);
     
        pTable=gtk_table_new(3,3,TRUE);
     
        gtk_container_add(GTK_CONTAINER(MainWindow), GTK_WIDGET(pTable));
        [...]
        gtk_widget_show_all(MainWindow);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void create_basic_window(GtkWidget **window)
    {
         /* Création de la fenêtre */
        *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(*window), "Fenetre");
        gtk_window_set_default_size(GTK_WINDOW(*window), 600, 400);
     
        gtk_window_set_position(GTK_WINDOW(*window), GTK_WIN_POS_CENTER);
     
     
        g_signal_connect(G_OBJECT(*window), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
     
    }

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Points : 31
    Points
    31
    Par défaut
    Effectivement, merci pour vos réponses !
    Il me reste visiblement à revoir les notions d'adressage.

  5. #5
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Allez, on sent qu'il y a comme un souci de compréhension des pointeurs, c'est l'heure de Binky !

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

Discussions similaires

  1. passage à la ligne dans fonction text
    Par tubaas dans le forum MATLAB
    Réponses: 4
    Dernier message: 01/02/2010, 12h04
  2. [Prototype] Passage de variables dans fonction
    Par Overstone dans le forum Bibliothèques & Frameworks
    Réponses: 7
    Dernier message: 09/06/2008, 16h52
  3. Pointeur int dans fonction récursive
    Par Invité dans le forum Débuter
    Réponses: 5
    Dernier message: 29/05/2008, 16h38
  4. passage de variable dans fonction
    Par nicerico dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/12/2006, 23h25
  5. passage pointeur NULL dans une fonction
    Par reptils dans le forum C
    Réponses: 4
    Dernier message: 11/05/2006, 23h12

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