ACTom 发表于 2011-9-2 07:50:30

g_signal_connect() 和 g_signal_connect_swapped()的区别

今天同学问了我这个问题,之前还真没研究过,仔细找了下资料,发现了他们的区别如下:



g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)other_widget);


为例。

在这里,当button的clicked触发的时候,会执行gtk_widget_destroy(button,other_widget),当然,实际上,gtk_widget_destroy只有一个参数,所以应该是gtk_widget_destroy(button);当然,我不知道glib是如何实现参数数目不同还可以匹配的,如果有知道的大牛,请与我交流。

而如果是

g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)other_widget);


那么,触发事件后,会执行gtk_widget_destroy(other_widget,button);也就是gtk_widget_destroy(other_widget);

所以,一句话就是,g_signal_connect_swapped会把用户参数和目标对象在回调函数中参数位置进行对掉。
页: [1]
查看完整版本: g_signal_connect() 和 g_signal_connect_swapped()的区别