QT聊天项目DAY06

news2025/5/10 21:30:29

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

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

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

相关文章

GNU,GDB,GCC,G++是什么?与其他编译器又有什么关系?

文章目录 前言1. GNU和他的工具1.1 gcc与g1.2 gdb 2.Windows的Mingw/MSVC3.LLVM的clang/clang4.Make/CMake 前言 在开始之前我们先放一段Hello World&#xff1a;hello.c #include <stdio.h>int main() {printf("Hello World");return 0; }然后就是一段老生常…

笔记整理五

STP生成树 stp生成树是用于解决二层环路问题的协议。 二层环路为有以下三种&#xff1a; 1.广播风暴 2.MAC地址的偏移&#xff08;每一次循环&#xff0c;都会导致交换机来回刷新MAC地址表记录&#xff09; 3.多帧复制 stp生成树&#xff1a;需要将原本的环型拓扑结构转换…

奥比中光tof相机开发学习笔记

针对奥比中光 tof相机&#xff0c;官方提供的资料如下ProcessOn Mindmap|思维导图 Orbbec SDK Python Wrapper基于Orbbec SDK进行设计封装&#xff0c;主要实现数据流接收&#xff0c;设备指令控制。下面就其开发适配进行如下总结&#xff1a; &#xff08;1&#xff09;系统配…

【面试向】点积与注意力机制,逐步编码理解自注意力机制

点积&#xff08;dot product&#xff09;两个向量点积的数学公式点积&#xff08;dot product&#xff09;与 Attention 注意力机制&#xff08;Attention&#xff09;注意力机制的核心思想注意力机制中的缩放点积自注意力机制中&#xff0c;谁注意谁&#xff1f; 逐步编码理解…

一个 CTO 的深度思考

今天和一些同事聊了一会&#xff0c;以下是我的观点 我的观点&#xff0c;成年人只能筛选&#xff0c;不能培养在组织中&#xff0c;应该永远向有结果的人看齐。不能当他站出来讲话的时候&#xff0c;大家还要讨论讨论&#xff0c;他虽然拿到结果了&#xff0c;但是他就是有一…

SQL通用语法和注释,SQL语句分类(DDL,DML,DQL,DCL)及案例

目录 SQL通用语法和注释 SQL语句分类&#xff08;DDL&#xff0c;DML&#xff0c;DQL&#xff0c;DCL&#xff0c;TPL&#xff0c;CCL&#xff09; DDL&#xff08;数据定义语言&#xff09; 数据库操作 查询&#xff08;SHOW、SELECT&#xff09; 创建&#xff08;CREAT…

AUTOSAR图解==>AUTOSAR_SWS_KeyManager

AUTOSAR KeyManager详细分析 AUTOSAR 4.4.0 版本密钥与证书管理模块技术分析 目录 1. 概述2. KeyManager架构 2.1 KeyManager在AUTOSAR架构中的位置2.2 架构说明 3. KeyManager模块结构 3.1 模块组件详解3.2 配置项说明 4. KeyManager证书验证流程 4.1 证书验证流程分析 5. Ke…

Jsp技术入门指南【七】JSP动作讲解

Jsp技术入门指南【七】JSP动作讲解 前言一、什么是JSP动作&#xff1f;二、核心JSP动作详解1. jsp:include&#xff1a;动态包含其他页面与<% include %>的区别 2. jsp:forward&#xff1a;请求转发到另一个页面3. jsp:param&#xff1a;为动作传递参数4. jsp:useBean&am…

10软件测试需求分析案例-查询学习信息

用户登录系统后&#xff0c;进入查询学生信息界面&#xff0c;输入查询字段值&#xff0c;点击查询按钮后&#xff0c;展示查询到的学生信息&#xff0c;可以重新输入字段值进行查询。 查询学生信息属于学生信息管理的子菜单&#xff0c;可以根据学号、姓名、性别查询。老师登录…

基于尚硅谷FreeRTOS视频笔记——6—滴答时钟—上下文切换

FreeRTOS滴答 FreeRTOS需要有一个时钟参照&#xff0c;并且这个时钟不会被轻易打断&#xff0c;所以最好选择systick 为什么需要时间参照 就是在高优先级任务进入阻塞态后&#xff0c;也可以理解为进入delay&#xff08;&#xff09;函数后&#xff0c;需要有一个时间参照&…

MCP服务,阿里云百炼,Cline,mysql-mcp-server,MCP通信原理

简介 MCP&#xff08;Model Context Protocol&#xff09;&#xff0c;模型上下文协议&#xff0c;是一种开放标准&#xff0c;用于将AI模型与外部数据源和工具建立安全的双向连接&#xff0c;它就像AI领域的USB-C接口&#xff0c;为AI模型提供了一种标准化方式来连接不同的数…

一个项目中多个Composer的使用方法

composer是依赖管理工具。 有时我们会在一个项目中使用到多个composer&#xff0c;且每个版本不同。 前提&#xff1a;例如项目xyz根目录vendor中存在阿里云的对应代码。我现在需要再composer腾讯云短信发送的SDK。 1、随便找个位置新建文件夹&#xff0c;存储腾讯云短信发送…

MCP 应用案例-网络设备批量管理

案例背景 需求痛点 企业需管理数百台跨地域网络设备&#xff08;交换机/路由器&#xff09;&#xff0c;传统方式存在&#xff1a; 人工SSH登录效率低脚本维护成本高&#xff08;不同厂商CLI语法差异&#xff09;状态监控依赖独立监控系统 解决方案 通过MCP协议构建智能网络…

国产之光DeepSeek架构理解与应用分析02

本专栏 国产之光DeepSeek架构理解与应用分析-CSDN博客 国产之光DeepSeek架构理解与应用分析02-CSDN博客 前置的一些内容理解 GPU TPU NPU的区别&#xff1f; 设计目的 GPU&#xff1a;最初是为了加速图形渲染而设计的&#xff0c;用于处理图像和视频数据&#xff0c;以提供高…

对美团leaf的初步学习

我的项目中使用的雪花算法生成的全局订单号。但是考虑到了雪花算法可能会由于时钟回拨导致生成的全局id重复。于是去研究了美团的leaf服务&#xff1a;Leaf——美团点评分布式ID生成系统 - 美团技术团队&#xff0c;并总结出该文章。 自己项目中的应用 由于对订单表做了分表&…

Nacos深度剖析与实践应用之-负载均衡

&#x1f4a1;简介 Nacos不仅提供服务注册与发现功能&#xff0c;还内置了强大的负载均衡能力。Nacos的负载均衡机制主要应用于服务消费者从服务注册中心获取服务实例列表后&#xff0c;如何选择其中一个实例进行调用的过程。 &#x1f9e0; 学习目的 这篇文章我们将探讨负载…

Photoshop安装与配置--简单攻略版

下载地址:Photoshop软件工具下载 安装完成后&#xff0c;即可运行Photoshop.exe&#xff1b;打开工具页面后&#xff0c;按照下面简单配置即可 1.编辑-》首选项-》常规 或者直接快捷键CtrlK 暂存盘&#xff1a;一定要设置为非C盘 2.性能 3.文件处理 以上配置比较基础&#xf…

桌面级OTA测试解决方案:赋能智能网联汽车高效升级

一、前言 随着智能网联汽车的快速发展&#xff0c;OTA&#xff08;Over-The-Air&#xff09;技术已成为汽车软件更新和功能迭代的关键手段。为确保OTA升级的可靠性、安全性和效率&#xff0c;构建一套高效、便捷的桌面级OTA测试解决方案至关重要。 本方案基于Vector先进的软硬…

PG,TRPO,PPO,GRPO,DPO原理梳理

强化学习方法的分类 一、基础概念 Policy Model&#xff08;Actor Model&#xff09;&#xff1a;根据输入文本&#xff0c;预测下一个token的概率分布&#xff0c;输出下一个token也即Policy模型的“动作”。该模型需要训练&#xff0c;是我们最终得到的模型&#xff0c;并由上…

Cursor新版0.49.x发布

小子看到 Cursor 0.49.x 版本正式发布&#xff0c;截止今天已经有两个小patch版本&#xff01;本次更新聚焦于 自动化Rules生成、改进的 Agent Terminal 以及 MCP 图像支持&#xff0c;并带来了一系列旨在提升编码效率和协作能力的改进与修复。 以下是本次更新的详细内容&…