GTK3-监控小部件发出的所有信号

GTK3-监控小部件发出的所有信号,gtk,gdk,Gtk,Gdk,有没有办法用GTK3监控小部件发出的所有信号?我知道事件信号是在事件之前发出的,但我不确定GTK术语中“事件”和“信号”之间的区别,因为这似乎并不能捕获所有信号 我知道GDK有一个函数GDK\u set\u show\u events,但它主要显示从操作系统发送到窗口的事件。是否有GTK3等价物?AFAIK没有内置函数,但我相信您可以自己动手: 用于获取gtype的所有信号ID。然后,在实例的每个信号上使用注册一个钩子,以便在发出特定信号时调用该钩子。在hook函数中,通过*ihint向您提供信

有没有办法用GTK3监控小部件发出的所有信号?我知道
事件
信号是在事件之前发出的,但我不确定GTK术语中“事件”和“信号”之间的区别,因为这似乎并不能捕获所有信号


我知道GDK有一个函数
GDK\u set\u show\u events
,但它主要显示从操作系统发送到窗口的事件。是否有GTK3等价物?

AFAIK没有内置函数,但我相信您可以自己动手:

用于获取gtype的所有信号ID。然后,在实例的每个信号上使用注册一个钩子,以便在发出特定信号时调用该钩子。在hook函数中,通过
*ihint
向您提供信号id,该id应为您提供打印调试消息所需的所有信息。(我没有测试它,但它应该可以工作)

请注意,不幸的是,这不适用于使用G_SIGNAL_NO_挂钩定义的信号

使用g_信号查找获取所有信号ID

这比描述的要复杂一点。为了使用g_信号查找,首先需要一个信号名称。如果要独立于对象类型监视每个信号,首先需要列出特定实例类型的所有信号。这可以通过g_signal_list_ID为一个GType进行安排。要获得实例上发出的所有信号,需要迭代该实例的所有父类型。您可以使用g_type_parent来实现这一点

我自己构建了一些实用函数,这些函数提供了与问题的目的相同的调试功能。您可以将GObject实例的所有信号的发射钩子连接到GtkWidget实例,或将发射钩子连接到GtkWidget实例及其所有子实例。

信号是GObject(即类型系统)功能,但不限于Gtk。事件是Gtk术语,只是来自显示服务器的消息的包装。当小部件接收到事件时,它通常会使用信号通知您这些事件。其他并非直接由显示服务器消息(如按钮点击)产生的信息也通过信号传输。