题
我使用 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
解决方案
好的,我想我现在知道你的意思了,我发现这个表匹配了gtk信号和gdk事件。 这是。
其他提示
假设我已经正确解释了您的问题,您希望将 Glade 文件中指定的信号连接到源代码中的函数。如何执行此操作取决于您是否使用 libglade 来加载生成的文件或 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 即将被弃用。
链接
以下是有关上述两个功能的相关文档的链接
您可以使用 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+
}
不隶属于 StackOverflow