注意QtCreator调试的时候一定要点调试安按钮,别点成运行。
QTcpSocket的readyRead()信号失灵的问题
sunnyeternally2012-07-01 08:52:43
本小白最近在用Qt写Tcp/ip的通信,程序在linux的虚拟机上跑得挺溜的,但出于其他需求换了win7平台后,Qt Creator一直无法通过编译(jom异常退出,原因暂时不明),所以用了vs2010来写,不过这下又跑出问题来了,自定义的槽connect(tcpSocket, SIGNAL(readyRead()),this,SLOT(update_message()));死也不理我.....用超级终端和TcpIP助手都试过了,槽完全没有被触发。似乎也有人遇到和我一样的问题,不过还是没有找到最可靠的答案,请各位大侠不吝赐教啊!
735点赞收藏14
分享
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
kgobb235813 2013-12-24
请问waitForReadyRead()怎么加呢?加在哪?
赞
sunnyeternally 2012-07-03
问题已经解决了,但还是多谢帮助,connect我之前已经设过断点来观察了,连接是成功的,后来加了一个waitForReadyRead()问题确实解决了,看起来是因为程序没有等数据传输完毕的原因,发送也是加了一个waitForByteWritten()就ok了,windows下和linux下似乎确实有一些不一样,linux下的数据不用等待就能触发信号,但确实还是加上一个wait函数更合理。
赞
addfourliu 社区成员 2012-07-02
connect返回的是bool值,你可以打个断点调试一下:
bool b=connect(tcpSocket, SIGNAL(readyRead()),this,SLOT(update_message()));
如果b为真,说明信号槽没有问题,然而槽函数没有响应,说明tcpSocket根本没有接收到数据,这样的话,你要检查客户端是否发送数据了
如果b为假,说明信号槽没有建立成功。
还有一种情况,就是你的connect在线程中
赞
sunnyeternally 2012-07-01
加了个waitForReadyRead();似乎就可以了.....