GTK+中文社区(gtk.awaysoft.com)

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 3625|回复: 0

g_signal_connect() 和 g_signal_connect_swapped()的区别

[复制链接]
  • TA的每日心情
    奋斗
    2016-10-11 09:20
  • 签到天数: 271 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2011-9-2 07:50:30 | 显示全部楼层 |阅读模式
    今天同学问了我这个问题,之前还真没研究过,仔细找了下资料,发现了他们的区别如下:



    g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)other_widget);


    为例。

    在这里,当button的clicked触发的时候,会执行gtk_widget_destroy(button,other_widget),当然,实际上,gtk_widget_destroy只有一个参数,所以应该是gtk_widget_destroy(button);当然,我不知道glib是如何实现参数数目不同还可以匹配的,如果有知道的大牛,请与我交流。

    而如果是

    g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)other_widget);


    那么,触发事件后,会执行gtk_widget_destroy(other_widget,button);也就是gtk_widget_destroy(other_widget);

    所以,一句话就是,g_signal_connect_swapped会把用户参数和目标对象在回调函数中参数位置进行对掉。
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

    申请友链|Archiver|小黑屋|手机版|GTK+中文社区 ( 粤ICP备13080851号 )

    我要啦免费统计

    GMT+8, 2024-11-21 20:45 , Processed in 0.019347 second(s), 8 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表