g_signal_connect:
用于连接事件与回调函数,如通过
将窗口销毁事件与gtk_main_quit函数关联,使得窗口点击关闭退出窗口
g_signal_connect_swapped
顾名思义,交换参数。对于回调函数
g_signal_connect会将第一个和第四个参数传入回调函数的GtkWidget *和gpointer。而g_signal_connect_swapped将第四个参数传入回调函数的GtkWidget *,并且忽略gpointer。
也就是说使用g_signal_connect的代码
static void
button_clicked_cb (GtkButton *button, GtkWidget *other_widget)
{
gtk_widget_hide (other_widget);
}
...
g_signal_connect (button, "clicked",
(GCallback) button_clicked_cb, other_widget);
可以g_signal_connect_swapped写成
我写程序测试他们的区别
#include <gtk/gtk.h>
void change_color_0(GtkWidget * widget, gpointer data)
{
GdkColor color;
color.red = 30000;
color.blue = 0;
color.green = 20000;
gtk_widget_modify_bg(widget,GTK_STATE_NORMAL,&color);
}
void change_color_1(GtkWidget * widget, gpointer data)
{
GdkColor color;
color.red = 10000;
color.blue = 55555;
color.green = 20000;
gtk_widget_modify_bg(widget,GTK_STATE_NORMAL,&color);
}
int main(int argc,char* argv[]){
GtkWidget *window;
GtkWidget *button;
GtkWidget *fixed;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"drawDemo");
gtk_window_set_default_size(GTK_WINDOW(window),300,200);
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window),fixed);
button = gtk_button_new_with_label("click me");
gtk_fixed_put(GTK_FIXED(fixed),button,100,100);
g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);
g_signal_connect (button, "button-press-event", G_CALLBACK (change_color_0), NULL);
g_signal_connect_swapped (button, "button-press-event", G_CALLBACK (change_color_1), window);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
点击button后,窗体和按钮颜色分别发生了改变

