Http请求不阻塞ui操作

利用QEventLoop与QNetworkAccessManager实现网络请求不阻塞ui的操作。

使用场景

  • 当我们发送一个网络请求时,持续等待发送回来的数据,再进行下一步操作,但是期间ui不能阻塞的情况。

示例

  • QEventLoop类提供一种进入和退出事件循环的方法。
  • execquit分别为进入和退出事件循环。
    1
    2
    3
    4
    5
    6
    7
    8
    QNetworkAccessManager 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();