• 4081阅读
  • 5回复

这个connect到底是怎么运作的呢 [复制链接]

上一主题 下一主题
离线davis45
 
只看楼主 正序阅读 楼主  发表于: 2009-08-28
主函数中:    QObject::connect(&ftpClient,SIGNAL(done()),&app,SLOT(quit()));    //done()


头文件中的信号定义:
    signals:
    void done();      //这里不是done(bool)

源文件的构造函数:    connect(&ftp,SIGNAL(done(bool)),this,SLOT(ftpDone(bool)   ));  //done(bool)

槽函数中:void FtpLogin::ftpDone(bool error)
{
                      ........
    emit done();
}
这里的done信号是同一个吗?
一个与quit()连接,一个与ftpDone()连接,在槽函数中又触发信号done(),这里把我给搞糊涂了,哪位给我缕一缕
谢谢大家的指教
离线beajisong

只看该作者 5楼 发表于: 2009-08-29
slot都可以有默认参数
signal我猜也可以吧

分两个连接方式解说:直连,排队

done这个信号其实是被QT moc工具实现的函数。moc会帮你写done的函数体。
done里面主要做这些事情:
查找当前当前class的信号与槽之间的连接信息(在class的metaobject里)
发现了与done连接的槽

如果这个槽是直连:
直接invoke这个槽
如果这个槽是排队的
也对这个槽invoke,但invoke的方式为排队,不会当场调用。而是会进入一个槽调用队列
当控制权回到槽所属对象所属的事件循环时才回被那个线程的事件循环调用(在那个事件循环所属的线程上下文环境中)




上面说的相当概括,需要你自己扣一扣
离线davis45
只看该作者 4楼 发表于: 2009-08-28
引用第3楼xtfllbl于2009-08-28 11:47发表的  :
那你至少return个东西出来吧,否则谁知道你操作结束了阿。

哦,这个done()不需定义,只是起到一个信号的作用,因为done(bool)自动执行的,触发槽函数,也就无需return了,谢谢你
谢谢大家的指教
离线xtfllbl

只看该作者 3楼 发表于: 2009-08-28
引用第2楼davis45于2009-08-28 11:30发表的  :
哦,是的是的,自己写的信号没有进行定义,我看了半天没绕出来,谢了谢了
PS:这个自己写的done()不定义也行吗,它的作用是所有FTP操作结束后发射

那你至少return个东西出来吧,否则谁知道你操作结束了阿。
上海欢迎您
离线davis45
只看该作者 2楼 发表于: 2009-08-28
引用第1楼xtfllbl于2009-08-28 11:23发表的  :
不是同一个,一个是自己写的,看不出来?

哦,是的是的,自己写的信号没有进行定义,我看了半天没绕出来,谢了谢了

PS:这个自己写的done()不定义也行吗,它的作用是所有FTP操作结束后发射
谢谢大家的指教
离线xtfllbl

只看该作者 1楼 发表于: 2009-08-28
引用楼主davis45于2009-08-28 11:19发表的 这个connect到底是怎么运作的呢 :
主函数中:    QObject::connect(&ftpClient,SIGNAL(done()),&app,SLOT(quit()));    //done()
头文件中的信号定义:
    signals:
.......

不是同一个,一个是自己写的,看不出来?
上海欢迎您
快速回复
限100 字节
 
上一个 下一个