【QT进阶】Qt http编程之用户登录注册功能实现

往期回顾

【QT进阶】Qt http编程之http与https简单介绍-CSDN博客

【QT进阶】Qt http编程之后端API测试工具postman使用介绍-CSDN博客

【QT进阶】Qt http编程之http相关类的简单介绍-CSDN博客

 【QT进阶】Qt http编程之用户登录注册功能实现

一、最终效果展示

重点在逻辑实现,界面美化就先没弄

由于我没有启动相应接口,所以肯定是拿不到数据的,点击登录的结果就是请求超时,如果做了接口能拿到,就是直接展示获取的json格式数据

 二、后端逻辑实现

主要是看看如何使用 Qt 的网络模块发送 HTTP POST请求,并添加超时处理的逻辑,以确保及时处理网络请求的超时情况。

1、思路

整体思路很清晰:点击登录按钮后执行槽函数,槽函数里执行发送http、post请求的函数,在该函数里设置各类需要的信息并发送post请求,然后调用函数执行post请求完成后的响应,获取请求状态码看是成功了还是失败了,弹出对应消息提示框即可

2、具体实现分析

2.1点击登录按钮后执行槽函数

点击登录按钮后执行槽函数,槽函数里执行发送http、post请求的函数,这里写了两个函数,考虑到的是是否超时,超时就执行另一个函数处理

//处理登录按钮点击事件
void login_register::on_btnLogin_clicked() 
{//执行发送 HTTP POST 请求的函数//test_http_post();  //发送 HTTP POST 请求test_timeout_http_post();  //发送 HTTP POST 超时请求
}
2.2设置信息执行post请求和响应

在发送http、post请求的函数里设置各类需要的信息并发送post请求,然后调用函数执行post请求完成后的响应

//发送 HTTP POST 请求
void login_register::test_http_post()
{//创建一个 QNetworkAccessManager 对象,用于发送网络请求。QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();// 设置urlQString url = "http://127.0.0.1:8080/login";// 设置头信息QNetworkRequest requestInfo;requestInfo.setUrl(QUrl(url));requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));// setRawData//就没有去获取用户输入,而是直接给默认的账户密码值QJsonObject rawJson;rawJson.insert("username", "zhangsan");rawJson.insert("password", "123456");//设置为json格式数据QByteArray byte_array = QJsonDocument(rawJson).toJson();// 发送post请求QNetworkReply* reply = pHttpMgr->post(requestInfo, byte_array);if (reply){// 添加事件循环机制,请求完成时调用 post_requestFinished 函数处理响应,返回后再运行后面的connect(pHttpMgr, &QNetworkAccessManager::finished, this, &login_register::post_requestFinished);}
}
2.3、获取请求结果并弹出消息提示框

然后调用函数执行post请求完成后的响应,获取请求状态码看是成功了还是失败了,弹出对应消息提示框

//处理 POST 请求完成后的响应。
void login_register::post_requestFinished(QNetworkReply* reply) 
{// 通过reply对象的 attribute 方法获取 HTTP 状态码,并将其存储在 QVariant 类型的变量statusCode。QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);//如果状态码有效,则输出状态码的整数值到调试输出。if (statusCode.isValid())qDebug() << "status code=" << statusCode.toInt();//通过reply对象的 attribute 方法获取 HTTP 状态码的原因,并将其存储在 QVariant 类型的变量 reason。QVariant reason = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();//如果原因有效,则输出原因的字符串值到调试输出。if (reason.isValid())qDebug() << "reason=" << reason.toString();//获取 QNetworkReply 对象的错误状态。QNetworkReply::NetworkError err = reply->error();//如果错误状态不是 NoError,表示请求失败,进入错误处理逻辑。if (err != QNetworkReply::NoError) {// 请求失败//再次获取 HTTP 状态码,用于显示错误信息。QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);//弹出消息框,显示请求失败的信息,包括状态码和错误信息。QMessageBox::information(this, "warn","http post failed, error code = " + statusCode.toString() + " error info: " + reply->errorString());return;}else {// 请求成功,进入成功处理逻辑。// 接收请求结果//读取响应数据,并存储在 QByteArray 类型的变量 responseByte 中。QByteArray responseByte = reply->readAll();QString strRes = responseByte; //将响应数据转换为字符串类型。//弹出消息框,显示请求成功的信息,包括响应数据。QMessageBox::information(this, "http post success","post response = " + strRes);}
}
 2.4超时请求处理函数

超时请求处理函数的大部分逻辑都是一样的,主要是发送请求后,添加了一个超时处理

注释写的还算清楚,大家可以多看看

//测试超时的 HTTP POST 请求。
void login_register::test_timeout_http_post()
{QNetworkAccessManager* pHttpMgr = new QNetworkAccessManager();// 设置urlQString url = "http://127.0.0.1:8080/login";// 设置头信息QNetworkRequest requestInfo;requestInfo.setUrl(QUrl(url));requestInfo.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));// setRawDataQJsonObject rawJson;rawJson.insert("username", "zhangsan");rawJson.insert("password", "123456");QByteArray byte_array = QJsonDocument(rawJson).toJson();// 发送post请求QNetworkReply* reply = pHttpMgr->post(requestInfo, byte_array);
// 添加超时处理,1ms超时QEventLoop eventloop;connect(reply, SIGNAL(finished()), &eventloop, SLOT(quit()));// 比如设置1ms内完成请求,否则就认为是超时//设置 1 秒后退出事件循环,模拟超时。QTimer::singleShot(1000, &eventloop, &QEventLoop::quit);eventloop.exec();QByteArray array;if (reply->isFinished()){if (reply->error() == QNetworkReply::NoError){//正常结束,读取响应数据QByteArray result = reply->readAll();QString strRes = result;QMessageBox::information(this, "http post success","post response = " + strRes);}else{// 异常结束// 请求失败QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);QMessageBox::information(this, "warn","http post failed, error code = " + statusCode.toString() + " error info: " + reply->errorString());return;}}else{// 请求超时disconnect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);reply->abort();QMessageBox::information(this, "http post timeout", "http post timeout");}reply->deleteLater(); //释放资源

以上就是如何使用Qt的网络模块发送HTTP、POST请求,并添加了超时处理的逻辑,以确保及时处理网络请求的超时情况的简单介绍

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6. DAX 时间函数-- DATE 日期--FIRSTDATE \LASTDATE\DATESMTD\DATESQTD\DATESYTD

函数名目的语法返回值FIRSTDATE 返回指定日期列在当前上下文中的第一个非空日期。FIRSTDATE ( <日期列> )表 包含具有日期值的单列和单行的表。LASTDATE返回指定日期列在当前上下文中的最后一个非空日期。LASTDATE ( <日期列> )表 包含具有日期值的单列和单行的表。…

为主机配置IP

第一种方法&#xff1a;nmcli #nmcli connection modify eth0 ipv4.method manual ipv4.addresses 172.25.254.100/24 ipv4.gateway 172.25.254.2 ipv4.dns 114.114.114.114 autoconnect yes #nmcli c up etho //激活网卡命令&#xff08;网卡早就配好&#xff0c;只是修改i…

JVM 如何判断对象是否可回收

垃圾回收器在对堆进行回收之前&#xff0c;首先需要确定哪些对象是可回收的。常用的算法有两种&#xff0c;引用计数算法和根搜索算法。 1. 引用计数算法 引用计数算法给每个对象添加引用计数器&#xff0c;用于记录对象被引用的计数&#xff0c;引用计数为 0 的对象即为可回收…

代码随想录训练营24day-贪心算法2

一、122 买卖股票最佳时机 题目介绍限制条件&#xff0c;必须卖了再买&#xff0c;而且当前交易一只股票。一开始想法是去遍历&#xff0c;找到每个区间段间的差值&#xff0c;然后再相加。看了解答&#xff0c;其实每一天的利润&#xff0c;都是可以用差值表示出来&#xff0…

详解JVM类加载

从类被加载到虚拟机内存中开始&#xff0c;到释放内存总共有7个步骤&#xff1a;加载&#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xff08;Preparation&#xff09;、解析&#xff08;Resolution&#xff09;、初始化&#xff08;Ini…

golang学习笔记(net/http库基本使用)

关于net/http库 我们先看看标准库net/http如何处理一个请求。 import ("fmt""log""net/http" )var count 0func main() {http.HandleFunc("/", handler)http.HandleFunc("/count", counter)log.Fatal(http.ListenAndServ…

cd /op-bash: 无法为立即文档创建临时文件: 设备上没有空间

问题 在shell输入命令按tab键时出现以下报错 (base) [link999hadoop102 ~]$ cd /op-bash: 无法为立即文档创建临时文件: 设备上没有空间 -bash: cd: /op: 没有那个文件或目录原因分析 磁盘空间不够 df -Th # 通过命令查看具体情况解决 1、清理大文件 进入到 容量-已用 使…

PostCSS详细介绍

PostCSS详细介绍 PostCSS是一个用JavaScript工具和插件转换CSS代码的工具&#xff0c;它允许开发者使用JavaScript插件来处理和转换CSS代码。其核心是一个解析器&#xff0c;可以将CSS代码转换成抽象语法树&#xff08;AST&#xff09;&#xff0c;然后通过插件对AST进行各种处…

展开说说:Android Fragment完全解析-卷二

书接上回&#xff0c;说一下fragment搭配Viewpager的使用。 是什么 Fragment已经在卷一整理过了&#xff0c;这里说一下ViewPager&#xff0c;ViewPager是一个可以左右滑动的容器组件&#xff0c;继承自ViewGroup。一般是用在首页banner和详情页的轮播图展示、APP首次使用的新…

【数据结构】LRU缓存

LRU缓存 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存是一种缓存淘汰策略&#xff0c;用于管理缓存中数据的存储和淘汰。LRU缓存会优先淘汰最近最少使用的数据&#xff0c;以便为新数据腾出空间。它通常用于提高应用程序的性能&#xff0c;通…

《深入浅出.NET框架设计与实现》笔记1——.NET CLI 概述

.NET CLI&#xff08;NET 命令行接口&#xff09;工具是用于开发生成运行和发布.NET应用程序的跨平台工具链。 一、CLI命令 默认安装的命令有 1、基本命令 new restore build publish run test vstest pack migrate clean sln help store 2、项目修改命令 add package add …

使用easyexcel将csv转为excel

一.背景 供应商系统下载的csv文件不支持域控&#xff08;主要是第三方wps服务不能对csv文件加密&#xff0c;但是可以对office系列产品进行权限访问的加密控制&#xff09;。因此思路就改为现将csv文件转为excel文件&#xff0c;然后对excel文件进行加域控制。本文主要介绍如何…

12.Hexo helpers类似函数和data folder数据文件夹

helper Hexo里的helper&#xff0c;或者说是函数 基本上就是小函数&#xff0c;可以在layout布局中使用&#xff0c;可以允许做一些事情 如字符串操作、检查true或false、检查是否在一个页面上、打印出某个页面中的日期或时间特定格式 打开index.ejs trim 可以通过 <%…

向量数据库的崛起:如何改变数据存储与机器学习的未来

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

ExpertPrompting:指导大语言模型成为杰出专家

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 论文地址&#xff1a;https://arxiv.org/abs/2305.14688 作者 & 机构&#xff1a;Benfen…

金融领域思考-前言

1背景介绍 不知不觉已经进入金融领域并且从事支付相关研发工作2年&#xff0c;2年了&#xff0c;应该是一个非常重要的分水岭。但越学习&#xff0c;越了解&#xff0c;越知道金融领域的复杂性。故希望借助写博客整理相关思绪&#xff0c;每有会意&#xff0c;便会记录&#x…

3.车载网络诊断测试用例标准与示例(车载网络诊断测试平台)

文章目录 1.概述2.测试用例2.1 用例名字2.2 用例ID2.3 测试需求来源2.4 测试环境2.5 测试目的2.6 前提条件2.7 手动/自动2.8 测试步骤2.9 评价标准2.10 备注2.11 测试结果2.12 测试数据3.测试用例示例4.其他1.概述

Linux嵌入式驱动开发-阻塞IO与非阻塞IO

文章目录 阻塞与非阻塞访问简介阻塞访问的实现等待队列等待队列头等待队列项从等待队列头添加/移除等待队列项等待唤醒等待事件API 非阻塞访问的实现轮询poll 函数原型可以返回的资源状态 阻塞与非阻塞访问简介 **IO&#xff1a;**Input/Output&#xff0c;也就是输入/输出&am…

环境感知——自动驾驶模型训练(菜鸟版本)

简述 本文用仿真工具录制下训练数据后&#xff0c;存到本地CSV文件中&#xff0c;本文仅用方向盘转角速度进行训练。 代码示例采用Jupyter编码&#xff0c;如在其他编辑器运行问题&#xff0c;请使用Jupyter. CSV文件中存储的数据如下&#xff1a; "center",&quo…

Mysql学习大纲

文章目录 整体大纲总结 整体大纲 大纲 MySQL在金融互联网行业的企业级安装部署mysql启动关闭原理和实战&#xff0c;及常见错误排查 花钱9.9 订阅了专栏MySQL字符集和校对规则史上最详细的Mysql用户权原理和实战&#xff0c;生产案例InnoDB引擎原理和实战&#xff0c;通俗易懂…