查看完整版本: [-- 槽函数执行顺序的问题 --]

QTCN开发网 -> Qt基础编程 -> 槽函数执行顺序的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

笑着後悔 2017-01-20 15:42

槽函数执行顺序的问题

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 2017-01-20 19:14
connect有连接方式,你可以看一下文档,默认应该是异步模式,所以要等你信号所在函数执行完成之后才会执行槽函数

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

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

rotung 2017-01-21 09:50
楼上正解。
connect的第五个参数设置成Qt::BlockingQueuedConnection (即阻塞模式),就会等待槽函数执行完成再执行接下来的debug了。

bran_lee 2017-01-21 10:12
connect仅仅是连接信号和槽,并不会导致槽函数的调用,不管第5个参数设置的是怎样的连接方式,在信号发起之前或者直接调用槽函数之前,槽函数都不会执行。如果想在槽函数执行完之后执行接下来的debug,要么把代码放进槽函数,要么在槽函数里使用另外一个信号或者直接调用另一个函数。


查看完整版本: [-- 槽函数执行顺序的问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled