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 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
    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