[GTK/C] Callback et structures
Ariane-M
-
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je débute en GTK et j'ai beaucoup de mal à gérer l'utilisation de mes callbacks.
Je voudrais récupérer un texte saisi dans une gk_entry.
Je dispose de cette structure :
Je récupère le signal avec :
Tout ceci fonctionne, sauf que je n'arrive pas à récupérer le nom en dehors de cette fonction (ce qui paraît normal puisqu'on ne fait qu'une copie de la structure pour la traiter à l'intérieur du callback). Comment puis-je me servir de la chaîne récupérée dans le reste du programme ?
Je débute en GTK et j'ai beaucoup de mal à gérer l'utilisation de mes callbacks.
Je voudrais récupérer un texte saisi dans une gk_entry.
Je dispose de cette structure :
struct sObjets{
GtkWidget *vbox_entry;
GtkWidget *pEntry;
GtkWidget *pValider;
gchar *nom_saisi;
};
Je récupère le signal avec :
void callback_valider_nom(GtkWidget *widget, gpointer obj)
{
struct sObjets *locale_obj = (struct sObjets *)obj;
locale_obj->nom_joueur = gtk_entry_get_text(GTK_ENTRY(widget));
printf("Vous avez choisi le nom %s", locale_obj->nom_joueur);
gtk_widget_destroy(locale_obj->vbox_entry);
}
Tout ceci fonctionne, sauf que je n'arrive pas à récupérer le nom en dehors de cette fonction (ce qui paraît normal puisqu'on ne fait qu'une copie de la structure pour la traiter à l'intérieur du callback). Comment puis-je me servir de la chaîne récupérée dans le reste du programme ?
A voir également:
- [GTK/C] Callback et structures
- Trouvez l'erreur dans la structure du document et corrigez-la. - Forum Word
- Unison gtk - Télécharger - Gestion de fichiers
- [Gtk+] - Forum Programmation
- [C] structures matrices - Forum C
- GTK Selfimage - Télécharger - Divers Utilitaires
1 réponse
Bonjour,
Comme indiqué gtk_entry_get_text retourne un pointeur (une adresse vers les données contenues dans l'entry) il vous est alors possible de copier les données en utilisant ce pointeur dans un tableau de gchar ou char (c'est la même chose).
https://www.gtk.org/api/2.6/glib/glib-Basic-Types.html#gchar
Ce qui pourrait donner en gros :
nom_joueur est un tableau alloué faut pas oublier de le free ou realloc si modification etc
const gchar *gtk_entry_get_text(GtkEntry *entry); Returns : a pointer to the contents of the widget as a string. This string points to internally allocated storage in the widget and must not be freed, modified or stored.http://developer.gnome.org/gtk/2.24/GtkEntry.html#gtk-entry-get-text
Comme indiqué gtk_entry_get_text retourne un pointeur (une adresse vers les données contenues dans l'entry) il vous est alors possible de copier les données en utilisant ce pointeur dans un tableau de gchar ou char (c'est la même chose).
https://www.gtk.org/api/2.6/glib/glib-Basic-Types.html#gchar
Ce qui pourrait donner en gros :
void callback_valider_nom(GtkWidget *widget, gpointer obj)
{
struct sObjets *locale_obj = (struct sObjets *)obj;
gchar *ptr = gtk_entry_get_text(GTK_ENTRY(widget));
locale_obj->nom_joueur = malloc(sizeof(gchar)*(strlen(ptr)+1));
strcpy(locale_obj->nom_joueur,ptr);
printf("Vous avez choisi le nom %s", locale_obj->nom_joueur);
gtk_widget_destroy(locale_obj->vbox_entry);
}
nom_joueur est un tableau alloué faut pas oublier de le free ou realloc si modification etc