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

QT聊天项目DAY06

1.从git上同步项目

编译测试,编译通过

Post请求测试

测试成功

2. email is 打印有问题,检查

解析结果是存储在jsonResult中的,修改

3. 客户端实现Post验证码请求

3.1 同步Qt客户端项目

检查QT版本,由于我在公司用的还是QT5.12.9,现在下一版5.14.2

https://download.qt.io/archive/qt/5.14/

选择一下安装目录

选择编译器版本,不适用MingW因为打包容易产生库的依赖缺失问题

3.2 配置系统环境

1. 右击此电脑

2. 新增VSQT扩展编辑器版本

3. 编译测试

图片丢失,检查

但是用QT5.12.9 就没有问题

可能是安装的时候缺失了什么吧

添加QTDesigner打开UI界面,看看是哪里出问题了

检查了一遍UI发现没有任何问题,重新编译查看,一切正常

VS必须要自己配置打开UI的启动器喔,如果不自己配置的话,容易打不开UI界面还可能只能打开代码界面,或者一打开UI就闪退,配置.ui文件的打开方式,上面以及介绍了喔

3.3 开始实现Post请求,然后获取服务器发来的验证码

如果邮箱格式正确就发送Http请求

/* 获取验证码 */
void RegisterWidget::OnGetCodeButtonClicked()
{QString Email = ui.Email_Edit->text();// 设置正则表达式QRegularExpression Regex(R"(^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$)");bool Match = Regex.match(Email).hasMatch();/* 如果邮箱格式正确 */ if (Match){// 发送Http验证码QJsonObject jsonHttpCode;jsonHttpCode.insert("email", Email);HttpManager::Instance()->PostHttpReq(QUrl("http://localhsot:8080//getVarifycode"),jsonHttpCode,ReqID::ID_GET_VARIFY_CODE,Modules::REGISTERMOD);}else{ShowTipLabel(QString::fromLocal8Bit("邮箱格式不正确"), "error");}
}

报错了,QNetworkReply::UnknownServerError,拼写错误,是host不是hsot

一切正确

4. Post请求的整体梳理

4.1 当获取验证码按钮点击时

触发该按钮对应的回调函数,在回调里会先获取邮箱文本,如果邮箱格式正确,会设置要发送的请求,即设置json

4.2 Http管理请求的对象发送该请求

1. 就是之前说过的,当服务器监听8080端口号时发现有客户端发来连接时,会分配一个socket套接字来管理该链接,然后继续监听8080端口;

这里对应的就是客户端发来连接请求,还有对应的请求体request

QNetworkReply* reply = m_pNetworkAccessManager->post(request, data);						
// 发送请求返回一个管理该连接的对象,如果服务器为该连接分配了套接字

2. 服务器会检查是否是Post请求

至于如何解析Post请求的在前面的文章说过了,这里不再赘述,如果客户端发来的json中有email这个key,说明解析成功了,然后回送响应

3. 客户端解析服务器发来的响应

这里只是将服务器回送的响应从客户端的接受缓冲区中全部读出来,并填充到QString中了

具体的解析行为还是在注册窗口里,解耦了,看课的代码很多自己都记不下来,没关系,重要的是掌握思想和整体脉络,只要熟悉一遍了,自己再去搭服务器框架的时候,再猜猜坑,有些代码背不住直接问AI让他帮你生成就可以了

在获取验证码的回调函数中,会检查该回应是否成功

这个error key 是在服务器中添加到响应中的_response["error"]  = 0,这里修改一下魔法数字

最后就是获取服务器响应报文中的email

至此整个客户端向服务器发送Post请求的一整套逻辑已经跑了一遍,老实说,这套代码让我再敲一遍,我也敲不出来这么完整的框架出来,这也说明了弯路才是捷径

5. 用Config文件来管理客户端的参数

1. 新建Confin.ini,并添加现有项到自己的解决方案中

2. 填充Config.ini

[GateServer]
host=localhost
port=8080
target=getVarifycode

3. 读取Config.ini 

根据我的开发经验来说

一般直接用QDir::CurrPath + Config/Config.ini

或者“./Config/Config.ini”

目前来说没出现过报错

#ifndef GLOBAL_H
#define GLOBAL_H
#include <QWidget>
#include <functional>
#include <QRegularExpression>
#include "QStyle"#include <memory>
#include <iostream>
#include <mutex>#include <QString>// extern 声明此变量是在其他文件中定义的全局变量
extern std::function<void(QWidget*)> repolish;extern QString ConfigPath;								// 配置文件路径#endif // GLOBAL_H
#include "Global.h"#include <QDir>// 初始化声明的全局变量
std::function<void(QWidget*)> repolish = [](QWidget* Widget)
{Widget->style()->unpolish(Widget);Widget->style()->polish(Widget);
};// 配置文件路径
QString ConfigPath = QDir::currentPath() + "/Config/Config.ini";

4. 用QSetting来管理这个config.ini

5. 重新定义创建URL的方式为读取config的方式,来拼接URL

相关文章:

  • 【开发心得】筑梦上海:项目风云录(16)
  • Workflow轻量级工作流引擎实现
  • C++高并发内存池ConcurrenMemoPool
  • mysql8.0.17以下驱动导致mybatis blob映射String乱码问题分析与解决
  • gis系统中如何提高shp大文件加载效率
  • B端可视化像企业数据的透视镜,看清关键信息
  • C 语 言 --- 指 针 3
  • jangow靶机笔记(Vulnhub)
  • 深度学习数据预处理:Dataset类的全面解析与实战指南
  • 在Windows创建虚拟环境如何在pycharm中配置使用
  • 【滑动窗口】最⼤连续 1 的个数 III(medium)
  • MLA(多头潜在注意力)原理概述
  • leetcode 2563. 统计公平数对的数目 中等
  • turtle库绘制进阶图形
  • 【Canvas与旗帜】标准英国米字旗
  • 深入解析进程与线程:区别、联系及Java实现
  • 【大模型框架】LLAMA-FACTORY使用总结
  • 【工控基础】工业相机设置中,增益和数字增益有什么区别?
  • 网络爬虫和前端相关知识
  • 数据结构——栈以及相应的操作
  • 能上天入海的“鲲龙”毕业了,AG600取得型号合格证
  • 人民日报:当阅读成为“刚需”
  • 95后男中音胡斯豪敲开芝加哥抒情歌剧院大门
  • 专访|《触碰你》导演长井龙雪:“秩父铁三角”不只是朋友
  • 两部门通报18个破坏耕地、毁林毁草典型问题
  • 体坛联播|曼联加时赛神奇逆转,晋粤大战CBA再出重磅罚单