gtk里面有g_signal_connect和一个g_signal_connect_swapped函数。
g_signal_connect是连接控件信号与回调函数的。通过特定的回调函数执行一些功能。
他的第一个参数就是连接的控件,第二个参数是控件信号,第三个参数就是回调函数,第四个参数就是传递给回调函数的自定义数据。
gulong g_signal_connect(gpointer instance, const gchar *detailed_signal, GCallback c_handler, gpointer data);
比如对于gtkbutton的"clicked"信号,他的回调函数形式就是这种。第一个参数就是g_signal_connect绑定的控件指针,第二个参数就是g_signal_connect传递的用户数据,回调函数根据这些参数进行操作。
void user_function (GtkButton *button,
gpointer user_data) : Run First / Action
Emitted when the button has been activated (pressed and released).
button :
the object that received the signal
user_data :
user data set when the signal handler was connected.而g_signal_connect_swapped也是实现一样的功能,区别在于多了"swapped",它会把第四个用户自定义数据交换到第一个参数上。这样传递给回调函数的控件指针就成了用户数据了。这样一些回调函数对于控件的操作可以由用户指定。
例子是一个gtk_widget_destroy函数,它会销毁控件。他的参数只有一个控件指针,
如果使用g_signal_connect,当点击按钮,会发现按钮被销毁。
但是通过g_signal_connect_swapped绑定按钮和gtk_widget_destroy函数,可以实现点击按钮释放窗体,而不是按钮本身了。