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 :

GTK Callback probleme argument et structure


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 1
    Par défaut GTK Callback probleme argument et structure
    bonsoir a tous, j'ai un projet d'informatique a réaliser et j'ai choisis GTK+ afin de devellopper mon logiciel. Cependant, je n'ai eu aucun cour sur la gestion d'évennement et la précedente réponse aurait du répondre a mes questions mais voila, celle la ne semble pas fonctionner. Pourriez vous jeter un oeil a mon code pour m'aider a identifier le bug?

    Pour vous aidez a corriger cela le plus rapidement possible, seules les lignes avec//**** sont a regarder en priorité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct recuperationTexte //la structure qui contient la zone ou on rentre le texte
    {
       GtkWidget *Wid;//****
     
     
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    void FenetreForce(GtkWidget *pWidget, GtkWidget *win)
    {
     
        GtkWidget *pwin;
        GtkWidget *EntryForce;
        GtkWidget *EntryDistance;
        GtkWidget *Table;
        GtkWidget *BoxForce;
        GtkWidget *label;
        GtkWidget *BoxDistance;
        GtkWidget *BoxValiderForce;
        GtkWidget *Button;
        GtkWidget *FrameForce;
        GtkWidget *FrameDistance;
         const gchar *sText;
         recuperationTexte *Entry;//****
         Entry = g_malloc(sizeof(recuperationTexte));//****
     
        /*Creation d'une nouvelle fenêtre*/
        pwin=gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_position(GTK_WINDOW(pwin), GTK_WIN_POS_CENTER);
        gtk_window_set_default_size(GTK_WINDOW(pwin), 320, 400);
        gtk_window_set_title(GTK_WINDOW(pwin), "Force");
        /*Creation de la zone de texte*/
        Entry->Wid=gtk_entry_new();//****
        EntryDistance=gtk_entry_new();
        /*creation de la table*/
        Table=gtk_table_new(2,0,TRUE);
        //insertion de la table
        gtk_container_add(GTK_CONTAINER(pwin), GTK_WIDGET(Table));
     
        //creation Box
        BoxForce=gtk_vbox_new(FALSE,0);
        //insertion box dans table
        gtk_table_attach_defaults(GTK_TABLE(Table), BoxForce,0, 1, 0, 1);
        // creation de la decoration
        FrameForce = gtk_frame_new("Norme de la Force (en N)");
        //insertion de la decoration dans la box
        gtk_box_pack_start(GTK_BOX(BoxForce), FrameForce, TRUE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(BoxForce),Entry->Wid, TRUE, FALSE, 0);//****
     
        //creation Box
        BoxDistance=gtk_vbox_new(FALSE,0);
        //insertion box dans table
        gtk_table_attach_defaults(GTK_TABLE(Table), BoxDistance,0, 1, 1, 2);
        // creation de la decoration
        FrameDistance = gtk_frame_new("Distance (en mm)");
        //insertion de la decoration dans la box
        gtk_box_pack_start(GTK_BOX(BoxForce), FrameDistance, TRUE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(BoxDistance),EntryDistance, TRUE, FALSE, 0);
     
        //creation Box
        BoxValiderForce=gtk_vbox_new(FALSE,0);
        //insertion box dans table
        gtk_table_attach_defaults(GTK_TABLE(Table), BoxValiderForce,0, 1, 1, 2);
        //creation du bouton Valider
        Button= gtk_button_new_with_label("valider");
        //insertion du bouton dans la box
        gtk_box_pack_start(GTK_BOX(BoxDistance),Button, TRUE, FALSE, 0);
     
        g_signal_connect(G_OBJECT(Button), "clicked", G_CALLBACK(onClick),(gpointer*)Entry->Wid);//****
        //g_signal_connect(G_OBJECT(pwin), "destroy", G_CALLBACK(gtk_main_quit), NULL);
        sText = gtk_entry_get_text(GTK_ENTRY(Entry->Wid));//****
        printf(" le texte ajouter est%s",sText);//****
     
     
     
     
        gtk_widget_show_all(pwin);
     
     
     
    }
     
     
    void onClick(GtkWidget *pEntry, gpointer data)//****
    {
     
     
        recuperationTexte* pi;//****
        pi=(recuperationTexte*) data;//****
     
     
     
     
     
    }
    Normalement je passe ma structure Entry dans la fonction onClick, ensuite dans onClick() je créé une nouvelle structure dans laquelle je copie data dedans, puis en sortant de la fonction, data est recopiée dans ma structure Entry, me laissant accès aux caractères tapé par l'utilisateur dans ma fonction de base. Mais il n'en est rien, tout se passe bien lors de la compilation, j'écris le texte que je souhaite rentrer et au moment de lire sText, il n'y a rien a afficher. Je ne vois donc pas du tout comment sortir les caractères tapés par l'utilisateur de la fonction onClick. Bref je suis bloqué.
    Merci par avance.

  2. #2
    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 : 55
    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
    Problème 1.

    Lorsque tu lances la fonction void FenetreForce(GtkWidget *pWidget, GtkWidget *win); elle se termine après l'affichage de pwin. Comment veux-tu récupérer à posteriori la saisie de Entry?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sText = gtk_entry_get_text(GTK_ENTRY(Entry->Wid));//****
        printf(" le texte ajouter est%s",sText);//****
    Ces deux lignes sont exécutées une seule fois. Une fois la fenêtre affichée, c'est fini.

    Problème 2.
    Quel pointeur envoies-tu à la fonction callback onClick();?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT(Button), "clicked", G_CALLBACK(onClick),(gpointer*)Entry->Wid);
    Réponse : Tu ne transmets pas le pointeur Entry mais le GtkEntry inclus dans la structure.

    Qu'espères-tu récupérer dans le callback?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    recuperationTexte* pi;//****
        pi=(recuperationTexte*) data;//****
    Réponse : un pointeur de type recuperationTexte*.

    Vois-tu l'incohérence?

Discussions similaires

  1. C GTK Callback et structure erreur
    Par Shiro123 dans le forum GTK+
    Réponses: 1
    Dernier message: 01/04/2015, 19h31
  2. probleme avec les structures
    Par salif98 dans le forum C
    Réponses: 3
    Dernier message: 27/08/2006, 01h30
  3. [Système] probleme dans la structure if/elseif/else
    Par samsso2005 dans le forum Langage
    Réponses: 9
    Dernier message: 14/03/2006, 17h50
  4. Probleme avec des structures
    Par lenectar dans le forum C
    Réponses: 17
    Dernier message: 30/12/2005, 09h53
  5. Fonction callback avec arguments ?
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 39
    Dernier message: 07/11/2005, 10h41

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