一、添加网络模块​​QT += network​​二、添加头文件

#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QJsonParseError>
#include <QJsonObject>
#include <QTime>

三、http请求有两种方式,一种是阻塞式,另一种是通过信号与槽的方式
a、阻塞式

void MainWindow::on_pushButton_clicked()
{
int startTime = QTime::currentTime().msec();
//生成对应的网络请求
QNetworkRequest request;
request.setUrl(QUrl("https://blog..net/yang1fei2/article/details/119118974"));

//发送Get请求
QNetworkAccessManager manager;
QNetworkReply *reply = manager.get(request);
QEventLoop eventLoop;
QObject::connect(reply, SIGNAL(finished()),&eventLoop, SLOT(quit()));
eventLoop.exec(QEventLoop::ExcludeUserInputEvents);

//对请求的返回异常进行处理
if(reply->error() != QNetworkReply::NoError)
{
qDebug()<< reply->error();
qDebug()<< "reply->error()";
return;
}

//解析返回的Json结果
QByteArray replyData = reply->readAll();
qDebug()<<QString(replyData);

qDebug()<<QTime::currentTime().msec() - startTime;
}

a、信号与槽的方式

void MainWindow::on_pushButton_2_clicked()
{
//构建一个manager对象
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
//manager具有异步API,当http请求完成后,会通过finished信号进行通知
connect(manager,&QNetworkAccessManager::finished,this,
[=](QNetworkReply *reply)
{
if(reply->error()!=QNetworkReply::NoError)
{
//处理中的错误信息
qDebug()<<"reply error:"<<reply->errorString();
}
else
{
//请求方式
qDebug()<<"operation:"<<reply->operation();
//状态码
qDebug()<<"status code:"<<reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug()<<"url:"<<reply->url();
//qDebug()<<"raw header:"<<reply->rawHeaderList();

//获取响应信息
const QByteArray reply_data=reply->readAll();
qDebug()<<"read all:"<<QString(reply_data).toUtf8();

}
reply->deleteLater();

});
//发送异步get请求
manager->get(QNetworkRequest(QUrl("https://blog.net/yang1fei2/article/details/119118974")));


}