GTK Glade 无法连接信号处理程序
GTK Glade can't connect signal handlers
我正在使用 GTK3。我已经设置了一个带有 glade 的 GUI 并跟踪了顶层的处理程序 window:
以及以下 main.c:
#include <gtk/gtk.h>
static gboolean on_wnd_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data){
g_print ("delete event occurred\n");
return TRUE;
}
static void on_wnd_destroy(GtkWidget *widget, gpointer data){
gtk_main_quit ();
}
int main(int argc, char *argv[]){
GtkBuilder *gtkBuilder;
GtkWidget *window;
gtk_init(&argc, &argv);
gtkBuilder = gtk_builder_new();
gtk_builder_add_from_file(gtkBuilder, "gui.glade", NULL);
window = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "wnd"));
gtk_builder_connect_signals(gtkBuilder, window);
g_object_unref(G_OBJECT(gtkBuilder));
gtk_widget_show(window);
gtk_main();
return 0;
}
编译时我收到警告:
main.c:3:13: warning: ‘on_wnd_delete_event’ defined but not used [-Wunused-function]
static void on_wnd_delete_event(){
^
main.c:8:13: warning: ‘on_wnd_destroy’ defined but not used [-Wunused-function]
static void on_wnd_destroy(){
^
并且在 运行 时,我定义的事件未被调用。
我做错了什么?
对于 gtk_builder_connect_signals
,回调函数不能是静态的,因为 builder.c 文件需要访问它们。 ̣see here
也需要gtk_builder_connect_signals(gtkBuilder, NULL);
而不是gtk_builder_connect_signals(gtkBuilder, window);
。
您可以通过以下方式添加回调符号:
gtk_builder_add_callback_symbol
(gtkBuilder,
"on_wnd_delete_event",
G_CALLBACK(on_wnd_delete_event));
您也可以导出符号以使其可用,但是您必须按照此处所述更改编译标志:
我正在使用 GTK3。我已经设置了一个带有 glade 的 GUI 并跟踪了顶层的处理程序 window:
以及以下 main.c:
#include <gtk/gtk.h>
static gboolean on_wnd_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data){
g_print ("delete event occurred\n");
return TRUE;
}
static void on_wnd_destroy(GtkWidget *widget, gpointer data){
gtk_main_quit ();
}
int main(int argc, char *argv[]){
GtkBuilder *gtkBuilder;
GtkWidget *window;
gtk_init(&argc, &argv);
gtkBuilder = gtk_builder_new();
gtk_builder_add_from_file(gtkBuilder, "gui.glade", NULL);
window = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "wnd"));
gtk_builder_connect_signals(gtkBuilder, window);
g_object_unref(G_OBJECT(gtkBuilder));
gtk_widget_show(window);
gtk_main();
return 0;
}
编译时我收到警告:
main.c:3:13: warning: ‘on_wnd_delete_event’ defined but not used [-Wunused-function]
static void on_wnd_delete_event(){
^
main.c:8:13: warning: ‘on_wnd_destroy’ defined but not used [-Wunused-function]
static void on_wnd_destroy(){
^
并且在 运行 时,我定义的事件未被调用。
我做错了什么?
对于 gtk_builder_connect_signals
,回调函数不能是静态的,因为 builder.c 文件需要访问它们。 ̣see here
也需要gtk_builder_connect_signals(gtkBuilder, NULL);
而不是gtk_builder_connect_signals(gtkBuilder, window);
。
您可以通过以下方式添加回调符号:
gtk_builder_add_callback_symbol
(gtkBuilder,
"on_wnd_delete_event",
G_CALLBACK(on_wnd_delete_event));
您也可以导出符号以使其可用,但是您必须按照此处所述更改编译标志: