利用QEventLoop与QNetworkAccessManager实现网络请求不阻塞ui的操作。
使用场景
- 当我们发送一个网络请求时,持续等待发送回来的数据,再进行下一步操作,但是期间ui不能阻塞的情况。
示例
- QEventLoop类提供一种进入和退出事件循环的方法。
exec
与quit
分别为进入和退出事件循环。1
2
3
4
5
6
7
8QNetworkAccessManager manager;
QNetworkRequest request(QUrl("http://www.qtbig.com"));
QNetworkReply* reply = manager.get(request);
QEventLoop eventLoop;
QObject::connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec(); // 进入等待,但ui事件循环依然进行。
QByteArray result = reply->readAll();