当前位置: 首页 > news >正文

泉州建设系统培训中心网站湖南郴州最新消息

泉州建设系统培训中心网站,湖南郴州最新消息,怎么区别做pc端和手机端网站,天推广人的网站一、HTTP客户端类功能: 1、POST请求发送: 支持发送JSON格式的数据自动处理请求头设置提供上传进度监控、 2、GET请求发送: 简单的GET请求实现支持下载进度监控 3、状态监控: 通过信号槽机制监控上传/下载进度错误处理和状态回调 /…

  一、HTTP客户端类功能:

1、POST请求发送:

  • 支持发送JSON格式的数据
  • 自动处理请求头设置
  • 提供上传进度监控、

2、GET请求发送:

  • 简单的GET请求实现
  • 支持下载进度监控

3、状态监控:

  • 通过信号槽机制监控上传/下载进度
  • 错误处理和状态回调
/*** @file HttpClient.h* @brief HTTP客户端类,用于处理HTTP请求* @details 提供异步HTTP请求功能,支持GET和POST方法,包含进度监控和错误处理*/#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QEventLoop>/*** @class HttpClient* @brief HTTP客户端类,继承自QObject* @details 封装了Qt网络请求功能,提供简单的接口进行HTTP通信*/
class HttpClient : public QObject 
{Q_OBJECTpublic:/*** @brief 构造函数* @param parent 父对象指针,用于Qt对象树管理*/explicit HttpClient(QObject *parent = nullptr) : QObject(parent) {manager = new QNetworkAccessManager(this);}/*** @brief 析构函数* @details 清理网络管理器资源*/~HttpClient() {if (manager) {manager->deleteLater();manager = nullptr;}}/*** @brief 发送POST请求* @param url 目标URL地址* @param data 要发送的JSON数据* @param callback 请求完成后的回调函数,参数为(是否成功, 响应内容/错误信息)*/void sendPostRequest(const QString& url, const QJsonObject& data, std::function<void(bool success, const QString& response)> callback) {// 创建网络请求对象QNetworkRequest request(url);// 设置请求头为JSON格式request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");// 将JSON对象转换为字节数组QJsonDocument doc(data);QByteArray postData = doc.toJson();// 发送POST请求QNetworkReply* reply = manager->post(request, postData);// 连接完成信号到响应处理函数connect(reply, &QNetworkReply::finished, this, [=]() {handleResponse(reply, callback);});// 连接上传进度信号connect(reply, &QNetworkReply::uploadProgress, this, &HttpClient::onUploadProgress);// 连接下载进度信号connect(reply, &QNetworkReply::downloadProgress, this,&HttpClient::onDownloadProgress);}/*** @brief 发送GET请求* @param url 目标URL地址* @param callback 请求完成后的回调函数,参数为(是否成功, 响应内容/错误信息)*/void sendGetRequest(const QString& url,std::function<void(bool success, const QString& response)> callback) {QNetworkRequest request(url);QNetworkReply* reply = manager->get(request);connect(reply, &QNetworkReply::finished, this, [=]() {handleResponse(reply, callback);});}signals:/*** @brief 上传进度信号* @param bytesSent 已发送的字节数* @param bytesTotal 总字节数*/void uploadProgressChanged(qint64 bytesSent, qint64 bytesTotal);/*** @brief 下载进度信号* @param bytesReceived 已接收的字节数* @param bytesTotal 总字节数*/void downloadProgressChanged(qint64 bytesReceived, qint64 bytesTotal);private slots:/*** @brief 处理上传进度的槽函数* @param bytesSent 已发送的字节数* @param bytesTotal 总字节数*/void onUploadProgress(qint64 bytesSent, qint64 bytesTotal) {emit uploadProgressChanged(bytesSent, bytesTotal);}/*** @brief 处理下载进度的槽函数* @param bytesReceived 已接收的字节数* @param bytesTotal 总字节数*/void onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) {emit downloadProgressChanged(bytesReceived, bytesTotal);}private:/** @brief 网络访问管理器指针 */QNetworkAccessManager* manager;/*** @brief 处理网络响应* @param reply 网络响应对象指针* @param callback 回调函数* @details 处理请求完成后的响应数据或错误信息,并调用回调函数*/void handleResponse(QNetworkReply* reply,std::function<void(bool success, const QString& response)> callback) {if (reply->error() == QNetworkReply::NoError) {// 请求成功,读取响应数据QString response = QString::fromUtf8(reply->readAll());callback(true, response);} else {// 请求失败,获取错误信息QString errorString = reply->errorString();callback(false, errorString);}// 清理响应对象reply->deleteLater();}
};

二、使用方式

1、作为类成员变量使用

class MyClass : public QObject {Q_OBJECT
private:HttpClient* httpClient;public:MyClass(QObject* parent = nullptr) : QObject(parent) {httpClient = new HttpClient(this);  // 将this作为父对象}// 不需要显式删除,会随父对象自动删除~MyClass() {// httpClient会自动删除,不需要手动删除}
};

2、 作为局部变量使用

void someFunction() {// 在栈上创建HttpClient client;// 使用client发送请求client.sendPostRequest("...", data, [](bool success, const QString& response) {// 处理响应});// client会在函数结束时自动销毁
}

3、动态分配使用

void someFunction() {// 动态创建HttpClient* client = new HttpClient();// 使用client发送请求client->sendPostRequest("...", data, [client](bool success, const QString& response) {// 处理响应// 在回调中删除clientclient->deleteLater();});
}

4、使用智能指针

#include <QScopedPointer>void someFunction() {QScopedPointer<HttpClient> client(new HttpClient());// 使用client发送请求client->sendPostRequest("...", data, [](bool success, const QString& response) {// 处理响应});// client会在QScopedPointer销毁时自动删除
}

 三、示例

// 创建客户端实例
HttpClient* client = new HttpClient(this);// 监听进度信号
connect(client, &HttpClient::uploadProgressChanged, this, [](qint64 sent, qint64 total) {qDebug() << "Upload progress:" << sent << "/" << total;
});// 准备POST数据
QJsonObject data;
data["name"] = "test";
data["value"] = 123;// 发送POST请求
client->sendPostRequest("http://api.example.com/endpoint", data, [](bool success, const QString& response) {if (success) {qDebug() << "Response:" << response;} else {qDebug() << "Error:" << response;}}
);

 

注意事项:

  1. 如果 HttpClient 作为 QObject 的子对象创建,会随父对象自动删除,不需要手动删除
  2. 使用 deleteLater() 而不是直接 delete,确保在 Qt 事件循环中安全删除对象
  3. 如果有正在进行的网络请求,建议等待请求完成后再删除 HttpClient
  4. 使用智能指针可以避免手动管理内存,推荐使用
http://www.yayakq.cn/news/762297/

相关文章:

  • 怎么制作网站卖电子文件铜梁网站建设
  • wordpress怎么加入站长统计百度联盟官网
  • ps怎样做网站详情页如何做网站截流
  • dedecms网站入侵网站建设 成都
  • asp.net 企业网站系统公司建设电子商务网站的目的
  • 常州便宜的做网站服务青岛房产备案价格查询官网
  • 如何自己做资源网站wordpress wp_postmeta
  • 襄阳网络公司 网站建设网站加速器免费安卓
  • Wordpress 建站 软件新网站建设风格
  • 如何建设自己的网站 知乎国外网站空间租用哪个好
  • 网站被收录要怎么做网站购买空间
  • 网站编辑的工作内容自媒体123网站
  • 企业网站建设图手机网站怎样做
  • 永泰建设工程网站美食网站的设计与实现
  • 抚州建设局网站推广方案万能模板
  • 代写网站公司网站域名过期
  • 网站设计 西安唐山网站制作案例
  • 在菲律宾做网站推广怎么样苏州建站公司精选苏州聚尚网络
  • wordpress好用的会员2020 惠州seo服务
  • 怎么仿网站链接雨花区师德师风建设专题网站
  • 门户网站建设的步骤南昌做网站的公司多不多
  • 比较流行的网站建设技术有哪些广州网站建设哪家强
  • 网站以下内容未做缓存网站开发交流群
  • 设计师个人作品集网站美团这个网站多少钱做的
  • 了解网站的建设心得河南网站备案系统短信
  • 弥勒网站设计公司加强纪检监察网站建设
  • 如何知道网站是否被k做海报图片去哪个网站找 知乎
  • 网站优化推广怎么做权威的网站建设排行榜
  • 企业的网站建设文章做全国社保代理的网站
  • 网站建设的流程是什么衣服网站建设方案书