Utilisation de signaux avec GtkBuilder
Bonjour,
Je suis nouveau dans le monde de Gtk, je suis Ubuntu 8.04, bureau Gnome.
Je programme avec Code::Blocks et crée mes interface graphique avec Glade 3.
Donc pour commencer, j'ai eu dans l'idée de crée une petit Hello World, grand classique.
Sous glade, je crée ma fenêtre, avec un signal sur Destroy nommé : form1_fermeture, un bouton Afficher avec un signal sur l'événement click nommé : cmdAffich_click.
avec la commande
Code:
gtkbuilder Personnel.glade Personnel.xml
Je transforme mon fichier glade pour utiliser gtk builder.
Voici le code xml :
Code:
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
| <?xml version="1.0"?>
<!--Generated with glade3 3.4.5 on Tue Jun 10 22:52:38 2008 -->
<interface>
<object class="GtkWindow" id="form1">
<property name="title" translatable="yes">Personnel</property>
<property name="destroy_with_parent">True</property>
<signal handler="form1_fermeture" name="destroy"/>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="lblAffich">
<property name="visible">True</property>
</object>
</child>
<child>
<object class="GtkButton" id="cmdAffich">
<property name="height_request">40</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_focus">True</property>
<property name="receives_default">True</property>
<property name="label" translatable="yes">Afficher</property>
<signal handler="cmdAffich_click" name="clicked"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface> |
Ensuite sous code::blocks, je crée un projet gtk, j'ajoute les options pour le compileur et le créateur de liens.
voici mon code C :
Code:
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
| #ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdlib.h>
#include <gtk/gtk.h>
//Déclaration d'une fonction d'interraction avec Gtk
//void form1_fermeture (GtkObject *object, gpointer user_data);
void form1_fermeture (GtkObject *object, gpointer user_data)
{
//Fermeture de l'application
gtk_main_quit();
}
//fichier Gtk+ de base
int main(int argc, char **argv)
{
GtkBuilder *builder;
GtkWidget *form1;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "Personnel.xml", NULL);
form1 = GTK_WIDGET (gtk_builder_get_object (builder, "form1"));
gtk_builder_connect_signals (builder, NULL);
g_object_unref (G_OBJECT (builder));
gtk_widget_show (form1);
gtk_main ();
return EXIT_SUCCESS;
} |
Pour l'instant, je n'ai programmé que la fermeture de l'application sur l'événement destroy.
Mais cela ne marche pas, la fenêtre se ferme mais cela n'arrête pas l'exécution du programme.
en effet la console m'affiche ceci :
Citation:
(Personnel:7288): Gtk-WARNING **: Could not find signal handler 'form1_fermeture'
](Personnel:7288): Gtk-WARNING **: Could not find signal handler cmdAffich_click'
Je ne comprend pas pourquoi, le programme n'arrive pas à faire le lien.
Suite à la lecture de plusieurs tutoriel, je ne trouve pas le problème.
Quelqu'un le voit il ? Cela doit être basique.