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

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 4088|回复: 4

gtkmm下的timerout 学到的sigc的几个函数

[复制链接]

该用户从未签到

发表于 2012-4-19 01:36:40 | 显示全部楼层 |阅读模式
在gtkmm的官网有个gtkmm学习文档.看到timouts时..借用它的部分代码.也跟着示例做了一下..但编译时在此句出错

sigc::slot<bool> my_slot = sigc::bind(sigc::mem_fun(*this,&TimerExample:n_timeout), m_timer_number);
//on_timerout回调函数
//int m_timer_number


但如果编译文档提供的代码却不会出现问题
最开始.无论我怎么修改这句.都过不去.去网上查sigc::slot 和sigc::bind却没有找到有用的信息.无奈之下.把官方提供的代码全部复制.进行修改.经过简化.和测试.终于找到问题所在.问题出在以下几个函数上.

sigc::bind 绑定: 是把此函数的最后一个参数(m_timer_number)的值传递给sigc::mem_fun连接的函数(on_timeout).所以.我们的函数就须要一个参数.
sigc::slot<bool> 这是什么我现在还不太明白.但它须要我的函数(on_timeout)返回一个参数.我试了下.什么参数都行.不返回也没关系.只是函数声明和定义里有返回类型就可以了.sigc::slot<bool>里的bool也可以换.但不能为void 和NULL.至于为什么我就不知道了.希望高手指点

所以.我们的回调函数就应该是这样的
class {
bool on_timeout(int time_numbs);
};

之后.开始正式连接
  sigc::connection conn = Glib::signal_timeout().connect(my_slot, timeout_value);
//my_slot 参看第一个代码
//int timeout_value 间隔时间


这里就很简单了.这里要说的是.当我们的回调函数(on_timeout)不须要参数时.我们可以省略sigc::slot 直接在my_slot位置换上sigc::mem_fun().
sigc::mem_fun:  绑定指定类的指定函数
sigc::ptr_fun    绑定函数
sigc::bind可能是组某函数指定参数
sigc::slot包装sigc::bind的.<不知道理解的对不对>

至此.我的理解也结束了.现在并不太明白sigc里面是做什么的.望有人指定一二
qzuser 该用户已被删除
发表于 2013-1-5 08:05:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
qzuser 该用户已被删除
发表于 2013-1-10 08:57:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
  • TA的每日心情
    慵懒
    2013-7-6 15:08
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]初来乍到

    发表于 2013-1-28 13:38:02 | 显示全部楼层
    SigC++ 是實現類似 GObject 信號功能的東西。(這個在主頁應該就有吧!)
    qzuser 该用户已被删除
    发表于 2013-2-4 21:06:18 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

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

    我要啦免费统计

    GMT+8, 2024-12-22 01:48 , Processed in 0.024064 second(s), 9 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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