根据 GObject 引用
g_signal_connect_swapped(instance, detailed_signal, c_handler, data); connects a GCallback function to a signal for a particular object. The instance on which the signal is emitted and data will be swapped when calling the handler.
我不太明白这是什么意思。这是否意味着
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);
基本上,如果您手动编码您的界面,它可以使您不必编写额外的函数。当然,可能还有一些我从未理解的更实际的用途。