QNetworkAccessManager ,QNetworkRequest,QNetworkReply,这3个类组合一起可以发出数据请求,然后根据QNetworkReply的应答信号finished来获取请求的数据,可以根据QNetworkReply中readAll来解析所请求的数据,(例如用百度的AI接口可以用来人脸识别, 即我提供数据通过前面的3个类发送请求 然后根据信号finished利用槽函数中QNetworkReply中readAll来获取百度算法计算好的结果,当然请求方法要根据接口要求对应)
QNetworkRequest request;
request.setUrl("HTTP....");//设置地址
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
QNetworkReply *reply =mNetworkManager.post(request,QJsonDocument(jsonObject).toJson());
QObject::connect(reply, &QNetworkReply::finished, [=](){
if(reply->error() == QNetworkReply::NoError){
QByteArray responseData = reply->readAll();//请求没有错误 解析所请求的内容
responseJson(QJsonDocument::fromJson(responseData).object());}
- QNetworkAccessManager:
- 这是一个管理类,负责发送网络请求并接收响应。你可以创建它的实例来管理多个网络请求。
- 它提供了多种方法来发送请求,如
get()
、post()
、put()
、delete()
等,这些方法都会返回一个QNetworkReply
对象。
- QNetworkRequest:
- 这个类封装了一个网络请求的所有配置信息,如 URL、请求头(Headers)、请求方法等。
- 在发送请求之前,你需要创建一个
QNetworkRequest
对象,并设置好所有必要的请求信息。
- QNetworkReply:
- 当你通过
QNetworkAccessManager
发送一个请求后,Qt 会创建一个QNetworkReply
对象来表示这个请求的响应。 QNetworkReply
对象会包含响应的状态(如成功、失败、重定向等)、响应头(Headers)以及响应体(Body,即实际的数据)。- 你可以通过连接
QNetworkReply
的信号(如finished()
、readyRead()
、errorOccurred()
等)来异步地处理响应。
- 当你通过
流程概述:
- 创建并配置请求:
- 创建一个
QNetworkRequest
对象,并设置其 URL、请求头等信息。
- 创建一个
- 发送请求:
- 使用
QNetworkAccessManager
的某个发送请求的方法(如post()
),将QNetworkRequest
对象和请求体(如果有的话)作为参数传递。 - 这个方法会返回一个
QNetworkReply
对象。
- 使用
- 处理响应:
- 你可以通过连接
QNetworkReply
的finished()
信号到一个槽函数,来异步地处理响应。 - 在槽函数中,首先检查是否有错误发生(通过
QNetworkReply::error()
方法)。 - 如果没有错误,使用
QNetworkReply::readAll()
方法读取响应体,并根据需要进行解析(如解析 JSON、HTML 等)。
- 你可以通过连接
- 清理:
- 在处理完响应后,不要忘了释放
QNetworkReply
对象。通常的做法是在槽函数中调用QNetworkReply::deleteLater()
,这样它会在事件循环的下一个迭代中被删除。
- 在处理完响应后,不要忘了释放