• 5295阅读
  • 9回复

[提问]为什么connect(udpSocket, SIGNAL(readyRead()), this, SLOT(receiveMessage()));槽没响应? [复制链接]

上一主题 下一主题
离线安然之风
 
只看楼主 倒序阅读 楼主  发表于: 2012-12-15
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(receiveMessage()));
我把connect的结果输出是1,这说明已经连接上了,但是槽函数receiveMessage()却没有响应
这是咋回事咧?
离线roywillow

只看该作者 1楼 发表于: 2012-12-15
那就是信号没发出?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线安然之风
只看该作者 2楼 发表于: 2012-12-15
回 1楼(roywillow) 的帖子
但connect的结果是1而不是0 ,那就是readyRead()信号的问题? 那该怎么办哦?
离线roywillow

只看该作者 3楼 发表于: 2012-12-15
回 2楼(安然之风) 的帖子
还有可能是槽函数的问题
比如里面的逻辑导致了你想要的内容根本不会执行到
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 4楼 发表于: 2012-12-15
回 2楼(安然之风) 的帖子
或者说udpSocket的问题,它根本就没有收到数据,自然也就不会发出信号了
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线安然之风
只看该作者 5楼 发表于: 2012-12-15
回 4楼(roywillow) 的帖子
有一次很奇怪的就连上了 进入槽函数了 但后来还是没有反应
离线安然之风
只看该作者 6楼 发表于: 2012-12-15
回 3楼(roywillow) 的帖子
槽函数没有问题,因为在函数头那里,我用断点输出都没有反应。不明白~
离线ypchen

只看该作者 7楼 发表于: 2012-12-27
首先要确定几个问题:1、信号函数readyRead()和槽函数receiveMessage()是否定义;2、udpSocket是不是有效的指针(顶层父类应该是QObject);3、是否有信号触发;4、你当前所在的类的顶层父类是不是QObject,如果是自己定义的类是不会进来的;5、如果前面都没问题,那就在connect加入第五个参数:Qt::DirectConnection
离线小鸟一只
只看该作者 8楼 发表于: 2012-12-29
这个问题我也遇见过,
首先,你确认一下你的槽函数是否进入了死循环或者是其它的什么,这个可能性不是很大,下面的可能性就很大了。
其次,就是你的发送数据是在接受数据前,这样的话就会导致你的readyRead()信号已经发出去了,但是你的信号-槽还没有建立。当你的信号-槽建立的时候,readyRead()信号也就不会再发了,导致你再也接受不到信号去促发槽函数。

你要明白readyRead()信号是在有数据达到的时候才会被emited的,也就是数据达到的那个时间点发出的,错过了那个时间点就再也不会发出了,即使你的缓存里有数据可读也不会发出readyRead()信号。

你可以这么做,在你发送数据前先建立好你的信号-槽,或者使用多线程。我现在也正在研究多线程去实现数据的发送读取。如果你的发送数据是靠别的信号去促发的,你现在可以去发送那个信号,应该也会促发你的receiveMessage()槽。


不知对你有用否。
离线小鸟一只
只看该作者 9楼 发表于: 2012-12-29
对了,你可以去看一下Qt Assistant,里面有对readyRead()信号的描述。
快速回复
限100 字节
 
上一个 下一个