在Qt中,进行HTTP就行如今官方提倡使用QNetworkAccessManager,其和QNetworkRequest和QNetworkReply配合使用,来完成,其是只支持异步的操做。最近使用QML作些android的小程序,须要进行HTTPS的操做,开始是使用的JS中的XMLHttpRequest,其不能使用HTTPS,我很郁闷,那只有使用C++来完成,可是又发现只支持异步,可是我但愿在进行网络操做时,不要响应客户的响应,给我提示,那么若是是异步,那么请求自己就须要可以标识其操做,我想若是是同步该多好啊。
而后就有了下面的代码android
const int TIMEOUT = (30 * 1000); QString Supporter::httpsPostHelp(const QString &url, const QString &data) { QString _result; QNetworkRequest _request; _request.setUrl(QUrl(url)); QSslConfiguration _sslCon = _request.sslConfiguration(); _sslCon.setPeerVerifyMode(QSslSocket::VerifyNone); _request.setSslConfiguration(_sslCon); _request.setHeader(QNetworkRequest::ContentTypeHeader, QString("application/x-www-form-urlencoded")); QNetworkReply *_reply = m_NtwkAccManager.post(_request, data.toLatin1()); _reply->ignoreSslErrors(); QTime _t; _t.start(); bool _timeout = false; while (!_reply->isFinished()) { QApplication::processEvents(); if (_t.elapsed() >= TIMEOUT) { _timeout = true; break; } } if (!_timeout && _reply->error() == QNetworkReply::NoError) { _result = _reply->readAll(); } _reply->deleteLater(); return _result; }
开始的时候我没有加 QApplication::processEvents()
致使了事件阻塞在循环这边,那也就拿不到网络返回的数据,其实网络操做仍是异步的,咱们只是在一个循环中处理时间并等待,这样能够作到同步和程序正常的事件循环。小程序