如何确定GTK+需要哪些GDK事件;信号?

如何确定GTK+需要哪些GDK事件;信号?,gtk,glade,gdk,Gtk,Glade,Gdk,我正在使用Glade-3进行GUI设计,但我一直遇到这个问题。我在GTK+文档中没有看到将信号映射到事件或Glade-3(3.4.5)中的任何内容。GTK+源代码中是否有位置可以找到此信息 注意:在这个问题中,重要的是要认识到事件和信号在GTK中是不同的 例如: 我有一个eventbox,它需要以下事件才能接收以下信号。如何确定给定信号需要哪些事件 Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK

我正在使用Glade-3进行GUI设计,但我一直遇到这个问题。我在GTK+文档中没有看到将信号映射到事件或Glade-3(3.4.5)中的任何内容。GTK+源代码中是否有位置可以找到此信息

注意:在这个问题中,重要的是要认识到事件和信号在GTK中是不同的

例如:

我有一个eventbox,它需要以下事件才能接收以下信号。如何确定给定信号需要哪些事件

Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK
Signals: leave_notify_event, enter_notify_event

假设我正确地解释了您的问题,您希望将Glade文件中指定的信号连接到源代码中的函数。如何实现这一点取决于您是使用libglade来加载文件generate还是GtkBuilder,两者都是相似的,但我将给出C语言的示例以供完成

使用libglade,您可以这样做:

GladeXml *xml = glade_xml_new(filename, NULL, NULL); // Load the file
glade_xml_signal_autoconnect(xml); // Connect the signals
使用GtkBuilder,情况如下:

GtkBuilder *xml = gtk_builder_new();
gtk_builder_add_from_file(xml, filename, NULL); // Load the file
gtk_builder_connect_signals(xml, NULL); // Connect the signals
使用GtkBuilder时,信号连接函数中的第二个参数可以替换为指向数据的指针,然后该指针将传递给信号处理程序

展望未来,我建议使用GtkBuilder,因为libglade即将被弃用

链接

以下是有关上述两个功能的相关文档的链接


好的,我想我现在明白你的意思了,我发现这个表匹配了gtk信号和gdk事件

您可以使用

首先在启动时注册您自己的GDK事件处理程序:

gdk_event_handler_set(my_gdk_event_handler, NULL, NULL);
。。。然后使用它打印出任何有用的信息,不要忘记通过
GTK_main\u do_event()
将事件传递给GTK+,如下所示:

void my_gdk_event_handler(GdkEvent *event, gpointer data)
{
    printf("Received GdkEvent of type %d", event->type);

    gtk_main_do_event(event); // Pass event to GTK+
}

这是一个很好的答案,但它不是我问题的答案。我将更新这个问题,因为它显然不清楚。我正在寻找类似于DoR答案中给出的表格(现在包含一个断开的链接)。但是,如果我理解正确的话,您的答案是关于如何通过插入调试事件处理程序来确定从给定信号触发哪些事件?该链接现在已断开,但(目前)有效。