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

QT中的HTTP

QT中的HTTP

HTTP Client

进⾏ Qt 开发时, 和服务器之间的通信很多时候也会⽤到 HTTP 协议.

通过 HTTP 从服务器获取数据.

通过 HTTP 向服务器提交数据.

核⼼ API

关键类主要是三个. QNetworkAccessManager , QNetworkRequest , QNetworkReply

QNetworkAccessManager 提供了 HTTP 的核⼼操作.
在这里插入图片描述

QNetworkRequest 表⽰⼀个 HTTP 请求(不含 body).

如果需要发送⼀个带有 body 的请求(⽐如 post), 会在 QNetworkAccessManager 的 post ⽅法中通过单独的参数来传⼊ body.

在这里插入图片描述

其中的 QNetworkRequest::KnownHeaders 是⼀个枚举类型, 常⽤取值:
在这里插入图片描述

QNetworkReply 表⽰⼀个 HTTP 响应. 这个类同时也是 QIODevice 的⼦类

在这里插入图片描述

此外, QNetworkReply 还有⼀个重要的信号 finished 会在客⼾端收到完整的响应数据之后触发

代码⽰例

给服务器发送⼀个 GET 请求.

  1. 创建界⾯. 包含⼀个 QLineEdit , QPushButton

• 先使⽤⽔平布局把 QLineEdit 和 QPushButton 放好, 并设置这两个控件的垂直⽅向的sizePolicy 为 Expanding

• 再使⽤垂直布局把 QPlainTextEdit 和上⾯的⽔平布局放好. ( QPlainTextEdit 的readOnly 设为 true )

• 设置垂直布局的 layoutStretch 为 5, 1 (当然这个尺⼨⽐例根据个⼈喜好微调).

在这里插入图片描述

💡 此处建议使⽤ QPlainTextEdit ⽽不是 QTextEdit . 主要因为 QTextEdit 要进⾏富⽂本解析, 如果得到的 HTTP 响应体积很⼤, 就会导致界⾯渲染缓慢甚⾄被卡住

  1. 修改 widget.h, 创建 QNetworkAccessManager 属性
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QNetworkAccessManager>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_pushButton_clicked();private:Ui::Widget *ui;QNetworkAccessManager*manager;
};
#endif // WIDGET_H
  1. 修改 widget.cpp, 创建实例
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowTitle("客户端");manager=new QNetworkAccessManager(this);
}
  1. 编写按钮的 slot 函数, 实现发送 HTTP 请求功能.
void Widget::on_pushButton_clicked()
{//1.获取到输入框中的urlQUrl url(ui->lineEdit->text());//2.构造一个HTTP请求对象QNetworkRequest request(url);//3.发送请求QNetworkReply* response=manager->get(request);//4.通过信号槽来接受响应connect(response,&QNetworkReply::finished,this,[=](){if(response->error()==QNetworkReply::NoError){QString html=response->readAll();ui->plainTextEdit->setPlainText(html);}else{ui->plainTextEdit->setPlainText(response->errorString());}//还需要对response进行释放response->deleteLater();});
}
http://www.dtcms.com/a/361027.html

相关文章:

  • 贝叶斯向量自回归模型 (BVAR)
  • 佐糖PicWish-AI驱动的在线图片编辑神器
  • 齿轮里的 “双胞胎”:分度圆与节圆
  • 3-6〔OSCP ◈ 研记〕❘ WEB应用攻击▸WEB应用枚举B
  • Coolutils Total PDF Converter中文版:多功能PDF文件转换器
  • DL00212-基于YOLOv11的脑卒中目标检测含完整数据集
  • 专题:2025全球新能源汽车供应链核心领域研究报告|附300+份报告PDF、数据仪表盘汇总下载
  • Ubuntu 服务器实战:Docker 部署 Nextcloud+ZeroTier,打造可远程访问的个人云
  • 开源模型应用落地-模型上下文协议(MCP)-为AI智能体打造的“万能转接头”-“mcp-use”(十二)
  • 2025年AI智能体开源技术栈全面解析:从基础框架到垂直应用
  • CSS 选择器完全指南:从基础到高级的全面解析
  • lesson51:CSS全攻略:从基础样式到前沿特性的实战指南
  • 面试常考css:三列布局实现方式
  • 前端必看:为什么同一段 CSS 在不同浏览器显示不一样?附解决方案和实战代码
  • LangChain开源LLM集成:从本地部署到自定义生成的低成本落地方案
  • 开源 React 脚手架推荐
  • LeetCode每日一题,2025-09-01
  • 视频提取文字用什么软件好?分享6款免费的视频转文字软件!
  • vizard-将长视频变成适合社交的短视频AI工具
  • (3dnr)多帧视频图像去噪 (二)
  • 统计学的“尝汤原理”:用生活案例彻底理解中心极限定理
  • Linux初始——Vim
  • 前端静态资源缓存与部署实践总结
  • 云手机为什么会受到广泛关注?
  • 【算法基础】链表
  • (Arxiv-2025)VACE:一体化视频创作与编辑
  • uniApp App 嵌入 H5 全流程:通信与跳转细节拆解
  • 【菜狗学聚类】聚类的一些评估指标——20250901
  • 交互体验升级:Three.js在设备孪生体中的实时数据响应方案
  • 飞牛nas修改crontab计划默认编辑器