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 :

Callback - Récupérer une valeur numérique


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Par défaut Callback - Récupérer une valeur numérique
    Bonjour à tous,

    Je sollicite votre aide pour résoudre un problème dans la gestion de mes callbacks. Je réalise un menu qui permettrait à l'utilisateur de cliquer sur des boutons correspondant à des enchères. J'ai une structure de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct sBoutonsEncheres{
     
        GtkWidget *bouton_annonce[5];
        GtkWidget *boutonValider;
        int clic_enchere;
     
    }BoutonsEncheres;
    L'interface du menu est créée dans un fichier interface.c, et j'ai donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BoutonsEncheres b;
    b.bouton_annonce[0]=gtk_toggle_button_new_with_label("100");
    g_signal_connect(GTK_OBJECT(b.bouton_annonce[0]), "toggled", GTK_SIGNAL_FUNC(callback_points_annonce), GINT_TO_POINTER(100));

    Les callbacks sont déclarés dans un fichier callback.c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void callback_points_enchere(GtkWidget *widget, gpointer enchere)
    {
        printf("Vous avez annonce %d points.\n", GPOINTER_TO_INT(annonce));
    }
    Tout cela fonctionne sans erreur, mais dès que je tente de récupérer la valeur de l'enchère dans la structure BoutonsEncheres, j'obtiens une erreur de segmentation. Je ne vois pas comment faire pour pouvoir me servir de la valeur récupérée par le callback dans le reste du programme.
    Sauriez-vous m'aider ?

  2. #2
    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
    Par défaut
    Bonjour,

    tu t'es trompée de nom de variable dans ta callback, tu dois utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GPOINTER_TO_INT(enchere)
    et pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GPOINTER_TO_INT(annonce)

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Par défaut
    Bonsoir,

    En effet, je m'excuse, je me suis aperçu de mon erreur après avoir posté le message ; mais j'ai les bonnes variables dans mon programme, là n'est pas mon problème.

    Ma question est plus générale : comment gère-t-on les callbacks au sein du programme ? Tous les exemples et tutoriels trouvés sur le net sont très basiques et aucun ne montrent une utilisation plus approfondie de ces fonctions... J'ai du mal à visualiser leur fonctionnement.

    J'ai créé une structure qui contient tous les widgets du programmes ainsi que des champs réservés aux valeurs récupérées par callback. Je récupères donc mes valeurs en les stockant dans la structure. Est-ce la bonne façon de procéder ? Et un second problème persiste : si, à la suite d'un clic de l'utilisateur, je souhaite appeler une fonction, est-ce pertinent d'appeler cette fonction à l'intérieur du callback ? J'ai l'impression que ça ne fonctionne pas...

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Blue-Berenice Voir le message
    ...
    J'ai créé une structure qui contient tous les widgets du programmes ainsi que des champs réservés aux valeurs récupérées par callback. Je récupères donc mes valeurs en les stockant dans la structure. Est-ce la bonne façon de procéder ?
    Oui, c'est la bonne méthode.

    Citation Envoyé par Blue-Berenice Voir le message
    ...Et un second problème persiste : si, à la suite d'un clic de l'utilisateur, je souhaite appeler une fonction, est-ce pertinent d'appeler cette fonction à l'intérieur du callback ? J'ai l'impression que ça ne fonctionne pas...
    Tout dépend. Si tu ne fais qu'appeler une fonction à l'intérieur de ton callback, alors autant appeler cette fonction directement.

    Plus généralement il te faut respecter le prototype du callback appelé en fonction du signal émit. C'est cette contrainte qui va dicter la manière de procéder.

    Pour finir, appeler une fonction depuis une fonction callback fonctionne très bien.

  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
    Par défaut
    Citation Envoyé par Blue-Berenice Voir le message
    Et un second problème persiste : si, à la suite d'un clic de l'utilisateur, je souhaite appeler une fonction, est-ce pertinent d'appeler cette fonction à l'intérieur du callback ? J'ai l'impression que ça ne fonctionne pas...
    Oui, c'est la bonne méthode. Le signal te dit quand ton code sera exécuté, et le code de ta callback te dit quelle action sera exécutée.

Discussions similaires

  1. récupérer une valeur numérique dans une chaine
    Par EFFLYINGJOKER dans le forum Développement
    Réponses: 2
    Dernier message: 30/03/2010, 16h26
  2. Récupérer les valeurs numériques d'une cellule
    Par Zebulon777 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/02/2010, 15h38
  3. [XSL]récupérer une valeur de plusieurs fichiers XML
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 05/02/2006, 00h32
  4. Réponses: 2
    Dernier message: 11/12/2004, 21h20
  5. retait d'une valeur numérique au mieu d'un texte
    Par RémiDavid dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/04/2004, 16h20

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