c - GTK Glade 无法连接信号处理程序

标签 c gtk

我正在使用 GTK3。我已经为顶层窗口设置了一个带有空地和以下处理程序的 GUI:

here

以及以下 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); .

关于c - GTK Glade 无法连接信号处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480114/

相关文章:

c - 了解 C 中的 addLast 方法

c - C 语言的维吉尼亚密码 (CS50)

c - 由于算法检查超出数组而导致的 C 运行时错误

user-interface - 为什么不鼓励从代码中移动 GUI 窗口?

c - 【C初学】GTK+及初学题

c - 何时定义 GTK 类,何时使用信号?

c - 多个VC编译错误

c - 输出不应该是 2 2

c - 根据复选框更改输入框中的文本 (GTK+)

c - 如何在 GTK+ 中构建计算器?