信号的发射和传播@GTK+ 2.0 中文教程连载

来源:互联网 发布:异形大战铁血战士 知乎 编辑:程序博客网 时间:2024/05/16 04:32

信号的发射和传播

信号发射是 GTK 为指定的对象和信号运行所有处理函数的过程。

首先,注意从信号发射返回的值是最后一个处理函数执行后返回的值。因为所有事件信号都是 GTK_RUN_LAST 类型,GTK 提供的处理函数将成为默认处理函数,除非你用 gtk_signal_connect_after() 设置连接。

一个事件 (如"button_press_event") 的处理过程是:

  • 从事件发生的构件开始。

  • 发出通常的 "event" 信号。如果信号处理函数返回 TRUE 值,停止所有的处理。

  • 否则,发出一个指定的,"button_press_event" 信号。如果它返回 TRUE,停止所有的处理。

  • 否则,转到父构件,重复前两步。

  • 继续直到某些信号处理函数返回 TRUE,或者直到达到了最顶层的构件。

上述问题的一些重点是:

  • 如果信号有一个默认的处理函数,那么你的处理函数返回的值不起作用,除非你用 gtk_signal_connect_after() 设置连接。(译者注:这是因为默认处理函数最后运行,而信号发射的返回值取最后一个处理函数的返回值。)

  • 为了阻止默认的信号处理函数运行,你需要用 gtk_signal_connect() 设置连接,并使用 gtk_signal_emit_stop_by_name() - 返回值只影响信号是否传播,不影响当前信号的发射。(译者注:也就是说,gtk_signal_emit_stop_by_name() 才影响信号的发射。停止发射,就使连接到这个信号的其它函数不继续被调用。)


<<< PreviousHomeNext >>>高级事件和信号处理Up操作选中区
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 慢性硬脑膜下血肿复发怎么办 佝偻病导致囟门晚闭怎么办 儿童液体补多了怎么办 脑脊液鼻漏3年了怎么办 结石掉到膀胱里怎么办 肾结石引起的腰疼怎么办 肾结石小但很疼怎么办 狗狗得了尿结石怎么办 生理期第四天必须游泳怎么办 碎石后吐的厉害怎么办 白细胞高红细胞高血尿怎么办? 早期肾癌术后复发该怎么办 肾结石因运动引起尿血怎么办 宝宝大便镜检阳性潜血怎么办 尿不尽刺痛带血怎么办 狗狗拉肚子拉血怎么办 肾血肿怎么办才吸收快 体检尿蛋白高3怎么办 肾炎会引起脸肿怎么办 12小孩尿蛋白3是怎么办 肝癌介入手术后肝功能不好怎么办 屁多且臭便秘怎么办 肝癌术1年后复发怎么办 怀孕便秘怎么办或大便太干拉不出 肠鸣便秘怎么办多尿 奥司他韦过量怎么办 憋的时间长尿痛怎么办 手过敏了怎么办最简单 肾结石不痛但是有血尿怎么办 儿童医院血液科挂不到号怎么办 搬完重物手抖怎么办 弯腰搬重物腰疼怎么办 搬了重物后腰疼怎么办 例假不走公务员体检血尿怎么办 憋尿久了尿不出来怎么办 憋尿引起的总有尿意怎么办 如果孕妇憋尿了怎么办 孕妇憋尿半个月怎么办 尿憋久了排空后膀胱疼怎么办 胸疼肚子疼不规则流血怎么办 上小便下面会痛怎么办