GTK 信号的 创建 发射 链接

来源:互联网 发布:网络诈骗套路 编辑:程序博客网 时间:2024/05/01 00:00

    这里自定义的信号是当按下回车键后,自动输出一行信息,说明输入已经结束。需要说明的是信号的定义不是在实例结构和类结构的定义(ouritem.h)中定义,而是在实例结构和类结构的实现(ouritem.c)中定义和实现的。

    首先为信号定义标记,它是以枚举类型来实现的(见代码),为我们定义的信号命名为OURITEM_OK_SIGNAL,也是第一个信号名;最后一个信号名为LAST_SIGNAL,这样按照C语言中枚举类型进行定义,如果定义多个信号的话,可以自行添加。

    然后,再定义一个整型数组ouritem_signals,其长度为LAST_SIGNAL,来保存信号创建后返回的值,这个值很关键,当发射信号的时候用到,如果多个信号的话,每个数组元素对应一个信号,而LAST_SIGNAL是没有具体做用的,只用来标识数组的长度。

    用函数g_signal_new来创建一个新的信号,它的第一个参数是信号名,它是以字母开始,其后可以是字母、数字、下划线或减号,这里命名为"ouritem_ok";第二个参数是此对象的类型,用宏G_TYPE_FROM_CLASS来取得;第三个参数是信号运行时的标记,我们取值为G_SIGNAL_RUN_FIRST,还有许多其它值可取(详见GOBJECT的API参考);第四个参数是函数指针在此对象的类结构中的偏移,一般用于调用对象的方法,这里我们调用函数指针enter_ok;第五个参数和第六个参数分别是此信号的类聚(accumulator)和类聚的数据,可以为空;第七个参数是用一标明此信号回调函数的返回类型和参数类型的closure_marshal, 我们取值为g_cclosure_marshal_VOID__VOID;第八个参数是信号的返回值的类型,如果没有返回值,则为G_TYPE_NONE;第九个参数标识我们自己加的参数的个数,我们不加自定义参数,所以设为0,如果有自定义参数可以加在这里,最后一个参数必需是NULL。

    信号的创建一般在类初始化(our_item_class_init)中进行

    这里我们用函数g_signal_emit来发射信号,它也有多个参数,它的第一个参数是对象的实例,用G_OBJECT来转换;第二个参数是信号的标记,即我们上面定义的ouritem_signals数组中的一个值,这里取ouritem_signals[OURITEM_OK_SIGNAL];第三个参数是详细内容,可以设为0不做处理。还可以用g_signal_emitv函数来发射信号,它的用法参考GOBJECT的API手册。

    当我们在控件的类结构中定义并实现了信号的发射后,我们就可以在应用此控件时为控件的信号连接回调函数,即用g_signal_connect宏就可以实现最常用的连接。

原创粉丝点击