如何找出GTK +信号需要哪些GDK事件?

时间:2009-04-30 18:17:02

标签: gtk glade gdk

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

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

示例:

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

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

3 个答案:

答案 0 :(得分:3)

好的,我想我现在知道你的意思了,我发现这个表匹配了gtk信号和gdk事件。 Here it is

答案 1 :(得分:2)

假设我已正确解释您的问题,您希望将您在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正在被弃用。

<强>链接

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

答案 2 :(得分:1)

您可以使用gdk_event_handler_set()

捕获事件

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

gdk_event_handler_set(my_gdk_event_handler, NULL, NULL);

...然后使用它打印出任何有用的信息,不要忘记通过gtk_main_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+
}