QT发送request请求

时间记录:2024/1/23

一、使用步骤

(1)pro文件中添加network 模块

(2)创建QNetworkAccessManager 网络管理类对象

(3)创建QNetworkRequest 网络请求对象,使用setUrl 方法设置请求url,使用setHeader 方法设置已知的请求头,使用setRawHeader 方法设置未知的请求头

(4)使用QNetworkAccessManagerget 方法发送get请求,post 方法发送post请求,返回QNetworkReply 对象

(5)为QNetworkReply 对象的finished 信号绑定槽,请求发送完成后触发此信号,然后在槽函数中使用QNetworkReply 对象的readAll方法获取请求返回的信息

二、QT中json数据的解析和生成json数据

(1)使用类QJsonDocumentQJsonObjectQJsonArrayQJsonValue

(2)普通json格式字符串转为json对象

cpp 复制代码
QString json = "{\"name\":\"zhangsan\",\"value\":[{\"name\":\"lisi\",\"age\":18},{\"name\":\"wangwu\",\"age\":20}]}";
QJsonDocument document = QJsonDocument::fromJson(json.toLocal8Bit());

(3)json对象解析获取数据

cpp 复制代码
QString json = "{\"name\":\"zhangsan\",\"value\":[{\"name\":\"lisi\",\"age\":18},{\"name\":\"wangwu\",\"age\":20}]}";
QJsonDocument document = QJsonDocument::fromJson(json.toLocal8Bit());
QJsonObject object = document.object();
QJsonValue value = object.value("name");//获取第一级json键为name的值
QString nameValue = value.toString();
int valueV = object.value("value").toArray().at(0).toObject().value("age").toInt();//获取第二级json键为age的值

(4)使用QJsonObject对象拼接json格式数据

cpp 复制代码
QJsonObject object2;//创建2级json
object2.insert("name","lisi");
object2.insert("age",18);

QJsonObject object3;//创建2级json
object3.insert("name","wangwu");
object3.insert("age",20);

QJsonArray array;//创建json数组
array.insert(0,object2);
array.insert(1,object3);

QJsonObject object1;//创建1级json
object1.insert("name","zhangsan");
object1.insert("array",array);//将拼接的json数组添加到1级json

QJsonDocument document;
document.setObject(object1);
QByteArray json = document.toJson();//转换为json数据

三、QT中数据进行base64编码和解码

(1)编码,图片进行编码

cpp 复制代码
    QFile file("D:\\file\\QT\\EveryTest\\Template\\1.jpg");
    file.open(QIODevice::ReadOnly);
    QByteArray imageData = file.readAll();
    file.close();
    QByteArray base64Data = imageData.toBase64();

(2)解码base64数据

cpp 复制代码
	QByteArray decode = QByteArray::fromBase64(base64Data);
    QPixmap pixmap;
    pixmap.loadFromData(decode);

四、关于https接口的请求,需要添加ssl文件

(1)使用QSslSocket::sslLibraryBuildVersionString();查看当前QT使用的ssl版本

(2)windows平台,mingw套件编译,下载ssl,然后复制libcrypto-1_1-x64.dll和libssl-1_1-x64.dll文件到应用程序的同级目录下,发布应用程序时同样需要复制这两个文件

(3)安卓手机平台,复制libcrypto_1_1.so和libssl_1_1到任意位置,然后在项目中添加这两个文件

相关推荐
Lion Long4 分钟前
C++20 异步编程:用future、promise 还是协程?
开发语言·c++·stl·c++20
lly2024065 分钟前
Web 标准:构建高效、兼容、可访问的网络基石
开发语言
渡我白衣5 分钟前
计算机组成原理(3):计算机软件
java·c语言·开发语言·jvm·c++·人工智能·python
m0_471199637 分钟前
【JavaScript】Map对象和普通对象Object区别
开发语言·前端·javascript
心.c8 分钟前
《从零开始:打造“核桃苑”新中式风格小程序UI —— 设计思路与代码实现》
开发语言·前端·javascript·ui
小龙报8 分钟前
【C语言初阶】动态内存分配实战指南:C 语言 4 大函数使用 + 经典笔试题 + 柔性数组优势与内存区域
android·c语言·开发语言·数据结构·c++·算法·visual studio
倔强菜鸟9 分钟前
2025.11.21-GO语言入门(一)
开发语言·后端·golang
白露与泡影10 分钟前
从 JDK 8 到 JDK 18,Java 垃圾回收的十次进化
java·开发语言·测试工具
一晌小贪欢10 分钟前
Streamlit应用如何部署到 Streamlit Community Cloud(保姆级教程)
开发语言·阿里云·部署·部署上线·streamlit应用·streamlit部署
lsx20240619 分钟前
CSS3 过渡
开发语言