大主要分两种情况:
一.最简单的方法,可能会造成阻塞
QNetworkRequest networkRequest;
QNetworkAccessManager networkManager;
networkRequest.setUrl(QUrl(url));
QNetworkReply *reply = networkManager.get(networkRequest);
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
reply->deleteLater();
二.使用信号与槽(不阻塞)
这里又分两种情况:
①当文件比较小,比如只有一个网址之类的时候
//直接在QNetWorkAccessManager的finshed中处理
connect(&m_netManger, SIGNAL(finished(QNetworkReply*)), this, SLOT(httpFinished(QNetworkReply*)));
void httpFinished(QNetworkReply* reply)
{
reply->deleteLater();
if(reply->error())
return;
QByteArray data = reply->readAll();
//处理数据
}
②当文件比较大,使用QNetworkReply的readyRead信号可以减少内存占用
reply = qnam.get(QNetworkRequest(url));
connect(reply, &QNetworkReply::finished, this, &HttpWindow::httpFinished);
//在readRead对应的槽中进行写入操作
connect(reply, &QIODevice::readyRead, this, &HttpWindow::httpReadyRead);
void httpReadyRead()
{
//比如一个文件中,当有数据到时就会执行写入
//file->write(reply->readAll());
}