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

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.xdnf.cn/news/19760.html

相关文章:

  • GSM8K 原理全解析:从数学推理基准到大模型对齐的试金石
  • 五、练习2:Git分支操作
  • 安卓版 Pad 搭载 OCR 证件识别:酒店入住登记的高效解法
  • 永磁同步电机无速度算法--高频脉振方波注入法(新型位置跟踪策略)
  • Meteor主题友链页面自研
  • QT中的TCP
  • HTML应用指南:利用GET请求获取全国招商银行网点位置信息
  • IS-IS的原理
  • MySQL 性能调优与 SQL 优化的核心利器
  • Windows 命令行:cd 命令1,cd 命令的简单使用
  • 【软件开发工程师の校招秘籍】
  • 安装nodejs安装node.js安装教程(Windows Linux)
  • 盲盒抽谷机小程序开发:如何用3D技术重构沉浸式体验?
  • 闭包的简单讲解
  • LeetCode 19: 删除链表的倒数第 N 个结点
  • 捡捡java——4、日志
  • 数据结构:单链表的应用(力扣算法题)第二章
  • MJ Prompt Tool-好用的Midjourney提示词工具
  • 如何测试瞬态电压抑制二极管性能是否达标?-ASIM阿赛姆
  • 同源策略--跨域
  • 盟接之桥说制造:浅谈本分和做正确的事情
  • HBase实战(一)
  • MFC应用防止多开
  • OpenCV 4.1.1 编译错误解决方案(cudaoptflow.hpp not found)
  • Day20 API
  • 数据血缘中的图数据库如何选择
  • Qt UDP 网络编程详解
  • 【学Python自动化】5.1 Python 与 Rust 数据结构对比学习笔记
  • (Arxiv-2025)VACE:一体化视频创作与编辑
  • (纯新手教学)计算机视觉(opencv)实战十一——轮廓近似(cv2.approxPolyDP)