|
|
《gtk+2.0编程范例》中的一个小程序:
#include<gtk/gtk.h>
gint count=1;
void on_button_clicked(GtkWidget *button,gpointer userdata)
{
g_print("%d\n",(gint)userdata);
count=count+1;
}
int main(int argc,char* argv[])
{
gint count=1;
GtkWidget *window;
GtkWidget *button;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
gtk_window_set_title(GTK_WINDOW(window),"test");
gtk_window_set_default_size(GTK_WINDOW(window),500,100);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window),40);
button=gtk_button_new_with_label(" ush ME!");
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)count);
gtk_container_add(GTK_CONTAINER(window),button);
gtk_widget_show(button);
gtk_widget_show(window);
gtk_main();
return FALSE;
}
程序很简单,就是按一下push ME按键,就在终端中输出count,每输出一次,count就加1。这样每次输出的数字就依此加1。但是执行后每次输出的都是1。
使用gdb调试,发现count每次都可以加1,而作为参数的userdata却没有增加,一直为1,于是输出便一直为1。
请问这个
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)count);
到底是怎么工作的,是将count本身作为参数传给函数on_button_click还是一次性的将count的初试值1传递给on_button_click? |
|