J'essaie d'utiliser Glade sur mon projet pour générer un fichier contenant des fenêtres, une grille ... Mais je suis coincé avec une erreur quand j'essaie d'écouter l'événement cliqué sur mes boutons, Je ne comprends pas pourquoi: sC - GTKUibuilder - Glade - erreur g_signal_connect
je suis arrivé ces erreurs ..
GLib-GObject-WARNING **: invalid (NULL) pointer instance
(test:5608): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
... pour chaque auditeur.
donc mon fichier appelé "project_ui.ui" situé dans le même répertoire que mon main.c:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkWindow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Button 1</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Button 2</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Button 0</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Quit</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">3</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
Mon main.c contient ce code:
#include <stdio.h>
#include <gtk-3.0/gtk/gtk.h>
static void printHello (GtkWidget *widget, gpointer data){
g_print("Hello World \n");
}
int main(int argc, char *argv[]) {
GtkBuilder *builder;
GObject *window;
GObject *button;
gtk_init(&argc,&argv);
builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "project_ui.ui", NULL);
window = gtk_builder_get_object(builder, "window");
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
//Button 1
button = gtk_builder_get_object(builder, "Button 1");
g_signal_connect(button, "clicked", G_CALLBACK(printHello), NULL);
//Button 2
button = gtk_builder_get_object(builder, "Button 2");
g_signal_connect(button, "clicked", G_CALLBACK(printHello), NULL);
//Button 0
button = gtk_builder_get_object(builder, "Button 0");
g_signal_connect(button, "clicked", G_CALLBACK(printHello), NULL);
//button Quit
button = gtk_builder_get_object(builder, "Quit");
g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), window);
gtk_main();
return 0;
}
est quelqu'un a une idée de le corriger?
Je viens d'essayer de suivre cet exemple: https://developer.gnome.org/gtk3/stable/ch01s03.html et obtenu exactement la même erreur ... signal ne veut pas écouter les boutons: s – nodeover
Selon le message d'erreur, vous fournissez des pointeurs «NULL». Vous n'avez évidemment pas de problème avec la connexion du signal mais avec la récupération de l'objet depuis votre interface graphique. Vous pouvez vérifier vos valeurs de retour pour les pointeurs 'NULL'. – Gerhardh
Vous pouvez vérifier la valeur de retour de 'gtk_builder_add_from_file' pour un début. Est-ce que le constructeur trouve même votre fichier d'interface utilisateur? – Gerhardh