在 GObject 参考手册中,它表示对于一个函数:
g_signal_connect(instance, detailed_signal, c_handler, data)
需要格式为“signal-name::detail”的详细信号字符串参数。我对此的初步理解是有预定义的信号详细信息要传入。如果是这种情况,我在哪里可以找到这些的列表?如果不是,那么它到底是什么意思,因为手册并没有把它说得太明显。
信号名称的::detail
部分是可选的。如果信号采用详细参数,那么它会在信号的文档中说明。否则你可以忽略它。
我知道的唯一实际使用详细参数的notify
信号是GObject
. 每当对象的任何属性发生变化时,notify
都会触发没有细节的信号,因此它相当无用。但是如果你连接到信号,那么只要对象的属性发生变化,它就会触发。notify::visible
visible
除非最近情况发生了很大变化,否则没有完整的官方信号列表。预定义的信号完全取决于您使用的技术。
您可以做的是查看您正在使用的 GObject 实例类的在线文档。例如,如果您正在使用GtkButton,您可以在线查找它并发现它发出六个信号(激活、单击、进入、离开、按下、释放)。GtkButton 是从 GtkContainer 派生的,它还发出几个可能由 GtkButton 发出的记录信号。GtkContainer 是从 GtkWidget 派生的,它发出许多可能由 GtkButton 发出的记录信号。
如果您发现一个对象没有发出您期望的某种信号,您还可以查看该对象的源代码,因为有时对象会发出未记录的信号,