分类: C/C++
2009-02-21 22:53:49
gulong g_signal_connect( gpointer *object,
const gchar *name,
GCallback func,
gpointer func_data );
前面对应的调用例子。
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);
我们要处理的信号是如下来定义与处理函数连接到一起的。
也就是object发出信号,信号名是name,调用的函数是func,传递给函数的参数是func_data
而实际调用的时候是用G_OBJECT,GCallback两个宏来实现的数据强制转换。
callback函数的定义是下面的形式,widget就是发出信号的对象,callback_data就是前面的第四个参数。
void callback_func( GtkWidget *widget,
... /* other signal arguments */
gpointer callback_data );
当然了由于信号对应的参数不同,上面的函数还是有变化的。
不是千篇一律的。
另外一个函数也是前面出现过的了。
gulong g_signal_connect_swapped( gpointer *object,
const gchar *name,
GCallback func,
gpointer *callback_data );
这个跟g_signal_connect基本上一样,不过看一下例子吧。
g_signal_connect_swapped (G_OBJECT (button), "clicked",
G_CALLBACK (gtk_widget_destroy),
G_OBJECT (window));
看出差别来了,冰果,就是最后一个参数,不再是传给callback函数的参数,换成了假的发送信号的源对象。
当然了,相应的callback函数也要变一下了。
void callback_func( gpointer callback_data,
... /* other signal arguments */
GtkWidget *widget);
是上面这种形式。
需要注意的是,这种callback是不能传递参数的。
所以通常也不用,可以说是属于栽赃嫁祸类型的。
总结一下:
信号,callback函数,两种连接object与callback的函数
就到这儿吧。