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 :

passer un argument à une fonction


Sujet :

GTK+ avec C & C++

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 30
    Points : 22
    Points
    22
    Par défaut passer un argument à une fonction
    Bonjour,

    Suite à une action sur un bonton, je souhaiterais passer une widget comme argument à la fonction qui est appelée. Cependant je ne sais pas réaliser cette manipulation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    pButtonC_ori = gtk_button_new_with_label("...");
    gtk_box_pack_start(GTK_BOX(pVBoxFrameC), pButtonC_ori, TRUE, FALSE, 0);
     
    g_signal_connect(G_OBJECT(pButtonC_ori), "clicked", G_CALLBACK(rechercher_fichier), NULL);
    L'argument G_CALLBACK permet de définir la fonction appelée par le bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    static void rechercher_fichier(GtkWidget *pWidget, gpointer data, GtkWidget *pEntry)
    Voici la fonction appelée qui attend comme dernier argument un widget de type Entry. Cependant je ne sais pas comme ce widget peut être transmi à la fonction.

    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 signal "clicked" demande une CALLBACK avec un prototype particulier. Le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void                user_function                      (GtkButton *button,
                                                            gpointer   user_data)      : Run First / Action
     
    Emitted when the button has been activated (pressed and released).
     
    button :
    	the object that received the signal
     
    user_data :
    	user data set when the signal handler was connected.
    Donc déjà là tu vois que tu fais erreur. Le prototype de ta fonction devrait s'écrire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void rechercher_fichier(GtkWidget *pWidget, gpointer data);
    Ensuite pour transmettre une donnée (un pointeur sur une donnée plus exactement) à ton callback utilise le dernier terme de la fonction g_signal_connect(); qui est pour l'instant à NULL.
    Je t'invite fortement à lire la faq à ce sujet : http://gtk.developpez.com/faq/?page=...AUX_parametres

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Merci pour cette aide.

    Voici le code utilisé, il pourrait servir à quelqu'un d'autre ...

    Code du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    pButtonC_ori = gtk_button_new_with_label("...");
    gtk_box_pack_start(GTK_BOX(pVBoxFrameC), pButtonC_ori, TRUE, FALSE, 0);
     
    g_signal_connect(G_OBJECT(pButtonC_ori), "clicked", G_CALLBACK(rechercher_fichier), (GtkWidget*) pEntryC_ori);
    Code de la fonction qui a été appelée par le bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    static void rechercher_fichier(GtkWidget *pWidget, gpointer data)
    {
        GtkWidget *pFileSelection;
        GtkWidget *pEntry;
        gchar *sChemin;
     
        pEntry = GTK_WIDGET(data); //récupère le widget passé en argument dans le code précédent (pEntryC_ori)!
        ...
    Encore merci

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

Discussions similaires

  1. passer plusieurs argument à une fonction callback
    Par Z-fly dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 04/07/2008, 18h05
  2. Passer comme argument une fonction paramétrée
    Par spikeespk dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/02/2008, 15h06
  3. Réponses: 6
    Dernier message: 06/04/2007, 21h20
  4. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

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