• 6746阅读
  • 19回复

请教QT信号和槽的奇怪问题【已解决】 [复制链接]

上一主题 下一主题
离线tfjy2008
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-27
我有四个类:ReadThread、ReslutData、ResultGui、ResultEntry,前三个类的实例化对象分别是thread 、resultData和W2。

它们几个的层次关系:  在 ResultEntry中实例化resultData和w2,然后线程thread是在resultData里启动的。

信号的传递顺序是:thread发送信号newPhoto(photoData)给resultData,然后resultData发出emitNewPhoto(photoData)信号给ResultEntry 

在ResultEntry里面:connect(resultData,SIGNAL(emitNewPhoto(photoData)),this,SLOT(outPut(photoData)));   photoData是我自定义的struct
现在的问题:
       能测试到resultData已经发出了emitNewPhoto信号,但是在ResultEntry里面死活不调用槽函数执行

有没有人遇到过类似的问题呀,请大家帮我分析分析,我QT新手,实在不知道问题出在哪了
[ 此帖被tfjy2008在2010-04-28 10:58重新编辑 ]
离线xtfllbl

只看该作者 1楼 发表于: 2010-04-27
如下?
上海欢迎您
离线tfjy2008
只看该作者 2楼 发表于: 2010-04-27
引用第1楼xtfllbl于2010-04-27 14:58发表的  :
如下?

嗯 ,不好意思 ,现在问题补充全了
离线yangfanxing
只看该作者 3楼 发表于: 2010-04-27
引用楼主tfjy2008于2010-04-27 14:47发表的 请教QT信号和槽的奇怪问题 :
outPut()槽只是一些简单的打印操作能测试到resultData已经发出了emitNewPhoto信号,但是在ResultEntry里面死活不调用槽函数执行

1、【测试】的代码?请不要文字描述了,看得贼累。

2、【打印】的代码?
qDebug() -----------------跟你的cout同作用,不过挺好用。谁用谁知道。
[ 此帖被yangfanxing在2010-04-27 15:37重新编辑 ]
PHPWind好恶心。。。不想看这种界面。。。
离线tfjy2008
只看该作者 4楼 发表于: 2010-04-27
引用第3楼yangfanxing于2010-04-27 15:28发表的  :
1、【测试】的代码?请不要文字描述了,看得贼累。
2、【打印】的代码?
qDebug()???


请问楼上qDebug()有什么作用呢?我一直都用的cout
离线yangfanxing
只看该作者 5楼 发表于: 2010-04-27
引用第4楼tfjy2008于2010-04-27 15:32发表的  :
请问楼上qDebug()有什么作用呢?我一直都用的cout

小传送门
PHPWind好恶心。。。不想看这种界面。。。
离线xtfllbl

只看该作者 6楼 发表于: 2010-04-27
类A,B,C,D
对象a,b,c

D下实例化b,c
信号通过线程发送到b,b再发送信号到D

你说b的信号确认发送,那么能确认D是否接受到信号?如果不能确认,你在哪里connect的?
上海欢迎您
离线xinqingfly

只看该作者 7楼 发表于: 2010-04-27
引用第5楼yangfanxing于2010-04-27 15:40发表的  :
小传送门


回城卷轴很多吗?到处开门
菜鸟也是鸟
离线tfjy2008
只看该作者 8楼 发表于: 2010-04-27
引用第5楼yangfanxing于2010-04-27 15:40发表的  :
小传送门

能详细一点解释么?我刚才在cout的地方换成了qDebug不行呀,编译都不过~ 谢谢
离线tfjy2008
只看该作者 9楼 发表于: 2010-04-27
引用第6楼xtfllbl于2010-04-27 15:52发表的  :
类A,B,C,D
对象a,b,c
D下实例化b,c
信号通过线程发送到b,b再发送信号到D
.......


我现在不能确认D有没有收到信号,我是在D的构造函数里connect的。但是b的信号是已经发出了的。
离线yangfanxing
只看该作者 10楼 发表于: 2010-04-27
引用第8楼tfjy2008于2010-04-27 15:57发表的  :
能详细一点解释么?我刚才在cout的地方换成了qDebug不行呀,编译都不过~ 谢谢

小小传送门

这只是个手段!
帖子跑题了!
PHPWind好恶心。。。不想看这种界面。。。
离线xtfllbl

只看该作者 11楼 发表于: 2010-04-27
引用第9楼tfjy2008于2010-04-27 16:00发表的  :
我现在不能确认D有没有收到信号,我是在D的构造函数里connect的。但是b的信号是已经发出了的。

奇怪了,那应该没什么问题阿。
要使用qDebug,需要#include<QDebug>
上海欢迎您
离线tfjy2008
只看该作者 12楼 发表于: 2010-04-27
引用第11楼xtfllbl于2010-04-27 16:07发表的  :
奇怪了,那应该没什么问题阿。
要使用qDebug,需要#include<QDebug>


嗯,理论是没有问题的,因为我试过其它的槽函数,都能调用,只是那个信号和槽没有参数

要崩溃了  
离线yangfanxing
只看该作者 13楼 发表于: 2010-04-27
引用第12楼tfjy2008于2010-04-27 16:09发表的  :
嗯,理论是没有问题的,因为我试过其它的槽函数,都能调用,只是那个信号和槽没有参数
要崩溃了  

别崩溃啊,查你的connet里边的槽函数名——【拼写】。
PHPWind好恶心。。。不想看这种界面。。。
离线tfjy2008
只看该作者 14楼 发表于: 2010-04-27
引用第13楼yangfanxing于2010-04-27 16:11发表的  :
别崩溃啊,查你的connet里边的槽函数名——【拼写】。

已经检查了一百遍了
不过突然想起来一个细节,请教一下
在ResultData里connect线程的信号的时候,最后加了一个Qt::DirectConnection编译才能通过 这个对于下一级的信号传递会有什么影响么

因为出问题那个信号刚好在传递的下一级
离线yangfanxing
只看该作者 15楼 发表于: 2010-04-27
引用第14楼tfjy2008于2010-04-27 16:24发表的  :
已经检查了一百遍了
不过突然想起来一个细节,请教一下
在ResultData里connect线程的信号的时候,最后加了一个Qt::DirectConnection编译才能通过 这个对于下一级的信号传递会有什么影响么
.......

应该不会有影响。

信号的传递顺序是:thread发送信号newPhoto(photoData)给resultData,然后resultData发出emitNewPhoto(photoData)信号给ResultEntry

last PS:这里的话"resultData发出emitNewPhoto(photoData)信号"是在"newPhoto(photoData)"的槽函数里执行的么?
PHPWind好恶心。。。不想看这种界面。。。
离线tfjy2008
只看该作者 16楼 发表于: 2010-04-27
引用第15楼yangfanxing于2010-04-27 16:33发表的  :
last PS:这里的话"resultData发出emitNewPhoto(photoData)信号"是在"newPhoto(photoData)"的槽函数里执行的么?



嗯 是的 在newPhoto(photoData)里发射emitNewPhoto(photoData)  信号的传递不会有级数的限制吧?实在是有些无语呀  
离线抠涕
只看该作者 17楼 发表于: 2010-04-27
检查一下 connect 的返回值?
离线tfjy2008
只看该作者 18楼 发表于: 2010-04-27
引用第17楼抠涕于2010-04-27 17:46发表的  :
检查一下 connect 的返回值?

connect有返回值么?
离线午小夜

只看该作者 19楼 发表于: 2010-04-27
哥哥。。。多看manual。
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
快速回复
限100 字节
 
上一个 下一个