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+ Discussion :

paramètres G_CALLBACK ardus


Sujet :

GTK+

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut paramètres G_CALLBACK ardus
    bonjour,

    je voudrai effacer ou réinitialiser des widgets contenus dans les pages d'un notebook.
    pour cela j'appelle une fonction:

    void cb_effacer (GtkWidget *pEntry_Ref, gpointer user_data)
    {gtk_entry_set_text(GTK_ENTRY(pEntry_Ref), "");}

    par un bouton:

    g_signal_connect(G_OBJECT(pButton_Effacer), "clicked", G_CALLBACK(cb_effacer), (gpointer *) pWindow);

    je ne comprend pas quels paramètres passer à G_CALLBACK

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Si l'appel de la fonction cb_effacer(); se fait bien par un GtkButton alors le prototype de la fonction cb_effacer(); doit être comme ca.

    Plus généralement à tout signal correspond un prototype de fonction associé. Il est nécessaire de les respecter sous peine d'avoir soit un fonctionnement très aléatoire soit rien qui ne fonctionne.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    merci mais je n'y arrive pas.

    le prototype :

    void cb_effacer(GtkWidget, GtkWidget, gpointer);

    la fonction :

    void cb_effacer(GtkWidget *pButton_Effacer, GtkWidget *pEntry_Ref, gpointer user_data)

    le G_CALLBACK :

    g_signal_connect(G_OBJECT(pButton_Effacer), "clicked", G_CALLBACK(cb_effacer), (gpointer *) pWindow);

    je ne sais pas si le prototype est bien déclaré et si les argumants de G_CALLBACK sont les bons ?

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Tu n'as pas bien regarder le prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void user_function (GtkButton *button, gpointer   user_data)
    Ce qui doit donner pour ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void cb_effacer(GtkWidget *pButton_Effacer, gpointer user_data)
    Dans la fonction cb_effacer(); tu récupères pWindow en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GtkWidget *pWindow=(GtkWidget*)user_data;
    Il y a plus court comme écriture mais pour la compréhension il n'y a rien de tel.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    mais alors que fait-on du GtkWidget pEntry_Ref, c'est lui que je veux effacer avec gtk_entry_set_text(GTK_ENTRY(pEntry_Ref), "");

    je ne comprend pas car lorsque ma fonction est dans le main elle fonctionne parfaitement, mais dans un autre fichier programme le debugger me renvoie:
    Glib-GObject-WARNING: invalid cast from GtkWindow to GtkEntry
    Gtk-CRITICAL: gtk_entry_set_text: assertion GTK_IS_ENTRY <entry> failed

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    C'est tout à fait normal.

    Pour connecter le Callback au signal "clicked" tu utilises la fonction g_signal_connect();. Jusque là tout va bien.
    Cette fonction te permet d'envoyer un pointeur de ton choix à la fonction CALLBACK. C'est le dernier argument. Ici tu lui envoies pWindow. Donc dans ton CALLBACK tu le récupères.

    Maintenant ce que tu désires est d'accéder à pEntry_Ref. rien de plus simple. Remplace dans la fonction g_signal_connect(); pWindow par pEntry_Ref. N'oublies pas aussi dans ton callback de changer le nom de la variable pour rester cohérent avec la démarche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GtkWidget *pEntry_Ref=(GtkWidget*)user_data;

Discussions similaires

  1. Passage de paramètre à une fonction dans un G_CALLBACK
    Par Dimitri_87 dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 15/09/2006, 11h04
  2. [xmlrad] Pb de paramètre ?
    Par Pm dans le forum XMLRAD
    Réponses: 7
    Dernier message: 07/01/2003, 14h37
  3. [SWT] Problème de paramètre GridData
    Par yolepro dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 06/12/2002, 10h37
  4. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47
  5. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24

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