根据 GObject 参考
g_signal_connect_swapped(实例,详细信号,c_handler,数据);将 GCallback 函数连接到特定对象的信号。调用处理程序时发出信号并交换数据的实例。
我不太明白这意味着什么。这是否意味着data
将指向指向的对象instance
并将instance
指向指向的对象data
或者我在这里犯了错误?
如果是前者,那么这背后的逻辑是什么?
你理解正确。
这允许您执行以下技巧:您有一个按钮(让我们称之为它button
),它应该textview
在按下时隐藏另一个小部件(让我们称之为它)。
然后你可以做
g_signal_connect_swapped(button, 'clicked', G_CALLBACK(gtk_widget_hide), textview);
实现这一目标。当按钮被按下时,它会产生'clicked'信号,并且回调textview
作为第一个参数调用,button
作为第二个参数调用。在这种情况下,回调gtk_widget_hide()
只接受一个参数,因此第二个参数被忽略,因为这是 C 调用约定的工作方式。
它与以下相同,但更短。
static void
on_button_clicked(GtkButton *button, GtkWidget *textview)
{
gtk_widget_hide(textview);
}
...elsewhere...
g_signal_connect(button, 'clicked', G_CALLBACK(on_button_clicked), textview);
基本上,如果您手动编写界面代码,它可以让您不必编写额外的函数。当然,可能还有一些我从未理解过的更实际的用途。