• 3360阅读
  • 4回复

[提问]槽函数执行顺序的问题 [复制链接]

上一主题 下一主题
离线笑着後悔
 

只看楼主 倒序阅读 楼主  发表于: 2017-01-20
void widget::udpReceiveInit()
{
    udpReceive = new QUdpSocket(this);
    udpReceive->abort();
    udpReceive->bind(8080, QAbstractSocket::ShareAddress | QAbstractSocket::ReuseAddressHint);
    udpReceive->connectToHost("192.168.11.103", 45987);
    connect(udpReceive, SIGNAL(readyRead()), this, SLOT(udpReceiveReadData()));
    qDebug() << "xxxx";
}

QT5里,一个udp接收小程序
每次运行时,connect里的槽函数还没运行,qDebug已经输出"xxxx"了。
试过connect的第五个参数directconnection 也还是一样。
这是为什么呢?
另外,怎么可以等到槽函数执行完成后,再回来执行connect下面的代码?



离线gasdfrewq

只看该作者 1楼 发表于: 2017-01-20
connect有连接方式,你可以看一下文档,默认应该是异步模式,所以要等你信号所在函数执行完成之后才会执行槽函数
离线gasdfrewq

只看该作者 2楼 发表于: 2017-01-20
回 gasdfrewq 的帖子
gasdfrewq:connect有连接方式,你可以看一下文档,默认应该是异步模式,所以要等你信号所在函数执行完成之后才会执行槽函数 (2017-01-20 19:14) 

另外 你这个只是连接操作,connect和下边的qdebug不会有任何关系,可以把两句看成2个赋值语句。
离线rotung

只看该作者 3楼 发表于: 2017-01-21
楼上正解。
connect的第五个参数设置成Qt::BlockingQueuedConnection (即阻塞模式),就会等待槽函数执行完成再执行接下来的debug了。
离线bran_lee

只看该作者 4楼 发表于: 2017-01-21
connect仅仅是连接信号和槽,并不会导致槽函数的调用,不管第5个参数设置的是怎样的连接方式,在信号发起之前或者直接调用槽函数之前,槽函数都不会执行。如果想在槽函数执行完之后执行接下来的debug,要么把代码放进槽函数,要么在槽函数里使用另外一个信号或者直接调用另一个函数。
1条评分金钱+1
笑着後悔 金钱 +1 - 2017-03-01
当你只有锤子时,你看什么都像是钉子!
快速回复
限100 字节
 
上一个 下一个