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 :

Fonctions CallBack et paramètre


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut Fonctions CallBack et paramètre
    Bonjour,
    J'utilise une boucle pour me générer un gtk_table contenant les informations de client et je voudrais rajouter un bouton sur chaque ligne pour supprimer un client.
    J'ai donc attaché un bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_signal_connect_object(GTK_OBJECT(bmodifier), "clicked", G_CALLBACK(supprimerClient(listeclient,positionclient)), NULL);
    et ma fonction supprimerClient supprime le client à la position "positionclient"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void supprimerClient (listeClient* a,int nnum)
    {
        ..
    }
    Cependant avec GTK j'ai cru comprendre qu'on ne pouvait pas appeler nos propre fonction comme ça et qu'il fallait mettre des fonctions de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void supprimerClient (GtkWidget *widget, gpointer data)
    {
       ...
    }
    Sauf que dans une fonction de ce type, que j'arrive à appeler, comment récupérer ma liste de client, et surtout le numéro du client à supprimer ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 293
    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 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Le prototype de la fonction CallBack est fonction du signal et du widget qui l'émet. En utilisant la doc. officielle on peut facilement accéder à ce prototype.

    Par exemple, pour le signal "clicked" d'un GtkButton le prototype est le suivant : void user_function (GtkButton *button, gpointer user_data);.

    Ensuite, si tu attaches ce callback à chaque bouton, tu récupères dans la fonction le pointeur du bouton qui a émit le signal. C'est le primer pointeur du prototype (ici GtkButton *button).
    Pour récupérer ta listclient, il suffit de la transmettre lors de l'attachement du callback avec le signal. C'est le dernier paramètre. Je te donne la ligne de code correctement écrite, sachant que la tienne ne peut pas fonctionner en l'état :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect_object(GTK_OBJECT(bmodifier), "clicked", G_CALLBACK(supprimerClient), listclient);
    Il reste encore un petit problème. Comment transmettre le numéro du client. Deux solutions possibles :
    1. tu incorpores cette information dans la structure listclient,
    2. tu utilises un pointeur libre attaché à tous les widgets que tu initialises à la bonne valeur.

    La deuxième solution est assez peu utilisée car elle rend la lecture du code assez obscure. On a du mal à savoir d'où viennent les données de prime abord. Les GtkWidget héritent des GObject. Ces derniers ont un pointeur que nous appellerons "data" libre auquel on peut attacher ce que l'on veut.
    Pour se faire on utilise les fonctions
    Si tu désires attacher à chaque bouton un nombre, tu peux utiliser la macro GINT_TO_PRINTER() et inversement GPOINTER_TO_INT();.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Parfait, merci !

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

Discussions similaires

  1. Paramètres des fonctions callback
    Par troumad dans le forum GTK+ avec C & C++
    Réponses: 13
    Dernier message: 31/03/2015, 14h55
  2. ob_start et paramètres de la fonction callback
    Par CaviarNAS dans le forum Langage
    Réponses: 4
    Dernier message: 16/02/2012, 09h07
  3. Réponses: 3
    Dernier message: 29/11/2011, 20h25
  4. [son]paramètre "len" de la fonction callback.
    Par troumad dans le forum SDL
    Réponses: 6
    Dernier message: 08/12/2009, 11h31
  5. Paramètres dans les fonctions callback
    Par kelepoc dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 24/07/2009, 01h09

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