【Qt聊天室客户端】用户信息界面设置功能实现

1. 按钮禁用关系梳理

基本逻辑梳理

用户界面-申请好友按钮

  • 只有当前用户不是你的好友时,该按钮才可以使用,否则是禁用状态

用户界面-发送消息与删除好友

  • 当前用户是你的好友时,按钮才可以使用,否则这两个按钮禁用
  • 区分是否是你好友的关键在于单聊还是群聊

具体实现

  • 初始化按钮的禁用关系

  • 发送消息逻辑实现

2. 删除好友功能

核心逻辑

删除好友可以从会话窗口和好友窗口中实现,但是具体实现时候又需要按不同情况分析,该处仅梳理核心逻辑,该功能的实现本质上与其他前后端功能相同

  • 从好友列表中删除指定好友
  • 从会话列表中删除与该好友相关的个人聊天会话但是群聊不受影响
  • 如果当前会话是要删除的好友会话,则清空当前会话

  • 【待优化】删除好友后实现自动刷新消息列表 

逻辑梳理

  • 用户信息窗口初始化信号槽的时候,设置信号槽,然后当删除按钮点击后即触发该处逻辑

  •  调用核心数据类删除好友,本质上还是调用客户端去删除

  • 服务端处理客户端请求
    • 首先设置路由,然后根据客户端的请求设置响应

  •  客户端开始处理服务端的响应

  • 注意该处的删除逻辑,是需要对聊天类型进行判断
    • 补充removeIf的逻辑
      • 用于删除满足特定条件元素的算法
      • 使用Lambda表达式,则是里面的判断条件如果为真则执行删除逻辑

 

  • 主窗口更新逻辑

3. 发送添加好友申请

该部分功能的实现主要分为两个部分

  • 客户端通过HTTP请求,让服务器处理添加好友申请的功能,发送方也可以看到对应提示
  • 服务端如果想要将添加好友申请推送到另一个客户端的时候,则需用websocket服务器

websocket服务器逻辑分析

  • 点击按钮后,触发槽函数,发送信号,在Server.cpp中处理该信号逻辑 

  

  • 客户端开始处理websocket发出的请求,然后主窗口进行更新

客户端发送给服务端HTTP请求处理逻辑梳理

  • 客户端通过点击按钮触发发送HTTP请求逻辑 

  • 服务端进行处理

  • 客户端处理服务端的响应

  • 主窗口处理客户端发送过来的信号

4. 同意好友申请

逻辑梳理

  • 用户 A 发送好友申请

    • 用户 A 通过客户端发送一个好友申请,服务器接收到申请请求并将此请求存储在数据库中,以维护好友关系的状态
  • 服务器通知用户 B

    • 服务器通过 WebSocket 将好友申请的通知实时推送给用户 B,提示 B 有新的好友申请等待处理
  • 用户 B 接受好友申请

    • 用户 B 在客户端点击“同意”来接受好友申请。客户端向服务器发送一个 HTTP 请求,表示同意这次好友申请
  • 服务器更新数据

    • 服务器在收到用户 B 的同意请求后,更新数据库中两者的好友关系状态,确认 A 和 B 成为好友
  • 服务器通知用户 A

    • 在好友关系确认之后,服务器再次通过 WebSocket 通知用户 A,告知对方已同意成为好友

具体实现-HTTP层面

同意好友申请,就是上述流程图中用户B同意用户A的请求,然后用户B向用户A发送的HTTP请求

  • 同意逻辑的实现

  • 主界面更新逻辑

  •  客户端实现请求

  • 服务端处理请求

  •  客户端处理响应
    • 更新核心数据类中的信息
    • 通知主界面更新

websocket服务器实现逻辑

  • 功能演示

  • 点击按钮后逻辑(该按钮负责发送信号)

  • 服务端开始处理信号(构建一个用户信息序列化后给客户端)

  • 客户端开始处理该响应

  •  主界面的显示内容更新

 

5. 拒绝好友申请逻辑

逻辑分析

客户端A通过拒绝按钮,发送信号给服务器进行处理,然后服务器通过websocket服务器推送给客户端B,从而实现拒绝好友逻辑,其中服务器推送给客户端B拒绝申请,在同意好友逻辑中已经实现,所以该处主要目标是解决客户端向服务器通过按钮发送请求。

具体实现

  •  申请好友中的拒绝按钮

  • 客户端开始执行拒绝好友申请逻辑

 

  • 主窗口更新

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一张图简单讲述Mamba的演进过程

这张图表提供了 RNN(1986)、LSTM(1997)、Transformer(2017)和 Mamba(2024)四种不同的神经网络架构在训练阶段、测试阶段和额外问题方面的对比。可以看出,Mamba 作为一种最…

redis v6.0.16 安装 基于Ubuntu 22.04

redis安装 基于Ubuntu 22.04 本文演示如何在ubuntu22.04下,安装redis v6.0.16,并配置测试远程访问。 Step1 更新环境 sudo apt updateStep2 安装redis sudo apt install redis-server -yStep3 启动 sudo systemctl restart redissudo systemctl sta…

Postman:高效的API测试工具

在现代软件开发中,前后端分离的架构越来越普遍。前端开发者与后端开发者之间的协作需要一种高效的方式来测试和验证API接口。在这个背景下,Postman作为一款强大的API测试工具,受到了广泛的关注和使用。 今天将介绍什么是Postman、为什么要使用…

Vue指令:v-else、v-else-if

目录 1.语法&#xff1a; 2. 题目 3.页面展示 4.结构 1.语法&#xff1a; 1.作用&#xff1a;辅助v-if进行判断渲染 2.语法&#xff1a;v-else 、v-esle-if"表达式" 2. 题目 <!DOCTYPE html> <html lang"en"> <head><meta chars…

RANSAC(随机抽样一致性算法)

RANSAC&#xff08;随机抽样一致性算法&#xff09;是一种用于估计数学模型参数的迭代方法&#xff0c;尤其适用于包含大量异常值的数据。使用 RANSAC&#xff0c;我们可以找到一个最优的线性拟合&#xff0c;同时最大限度地减少对异常值的影响。接下来&#xff0c;我将给出一个…

群控系统服务端开发模式-应用开发-业务架构逻辑开发第一轮测试

整个系统的第一个层次已经开发完毕&#xff0c;已经有简单的中控&#xff0c;登录、退出、延迟登录时长、黑名单、数据层封装、验证层封装、RSA加解密、Redis等功能&#xff0c;还缺获取个人、角色按钮权限、角色菜单权限功能。角色按钮权限以及角色菜单权限等明后天开发&#…

react基础之reactHooks

文章目录 React Hooks 使用指南常用 Hooks使用规则 小结 React Hooks 使用指南 React Hooks 是 React 16.8 引入的一种新特性&#xff0c;允许在函数组件中使用状态和其他 React 特性&#xff0c;而无需编写类组件。以下是一些基础的 Hooks 及其使用规则。 常用 Hooks useSta…

桑基图在医学数据分析中的更复杂应用示例

桑基图&#xff08;Sankey Diagram&#xff09;能够有效地展示复杂的流动关系&#xff0c;特别适合用于医学数据分析中的多种转归和治疗路径的可视化。接下来&#xff0c;我们将构建一个稍微复杂的示例&#xff0c;展示不同疾病患者在治疗过程中的流动&#xff0c;以及他们的治…

Android15音频进阶之Cuttlefish搭建音频开发环境(九十二)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

koa + sequelize做距离计算(MySql篇)

1.核心思路 1.利用sequelize的fn方法调用MySql原生函数&#xff08;ST_Distance_Sphere 、POINT&#xff09; 2.通MOD过函数将查询到的距离除以1000&#xff0c;这样km就变成了米 &#xff0c;利用FOMAT函数将查询到的结果精确到两位小数 3.这里利用到了MySql的原生函数&…

【Oracle APEX开发小技巧10】CSS样式控制交互式报表列宽和自动换行效果

在实际开发中使用交互式报表可能会出现某些字段的列宽过长&#xff0c;某些字段的列宽只有缩到一角的情况&#xff0c;那么如何解决这种情况呢&#xff1f;有没有方法可以控制交互式报表的列宽呢&#xff1f;下面就来介绍一下解决方法&#xff1a; 页设置-页-CSS-内嵌 输入如下…

IO详解(BIO、NIO、实战案例、底层原理刨析)

文章目录 IO详解&#xff08;BIO、NIO、实战案例、底层原理刨析&#xff09;&#x1f30e; IO&#x1fa90; 同步、异步、阻塞、非阻塞⚡ BIO&#x1f47d; 简介&#x1f60e; 案例 &#x1f680; NIO✈️ 介绍&#x1f697; Buffer&#xff08;缓冲&#xff09;&#x1f6f8; …

#渗透测试#SRC漏洞挖掘# 信息收集-Shodan之搜索语法进阶

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

Python复习1:

一、数据类型 1.数字&#xff1a;int、float、bool 2.字符串&#xff1a;string 3.列表&#xff1a;list 4.集合&#xff1a;set 5.字典&#xff1a;dictionary 二、Test 1.print输出固定格式 num110 str1"hello world" #输出的固定格式 print("num1%d&…

【MyBatis源码】BoundSql分析

基础 BoundSql是对SQL语句及参数信息的封装&#xff0c;它是SqlSource解析后的结果。Executor组件并不是直接通过StaticSqlSource对象完成数据库操作的&#xff0c;而是与BoundSql交互。BoundSql是对Executor组件执行SQL信息的封装&#xff0c;具体实现代码如下&#xff1a; …

Python爬虫抓取三个网站上的英语每日一句

一、引言 大学英语学习需要巩固高中语法&#xff0c;补充四六级词汇&#xff0c;增加英语语感&#xff0c;提升英语的运用能力。学好英语有很多种方法&#xff0c;采用句子来突破英语语法、词汇、口语和听力的方法简单有效&#xff0c;值得提倡。李阳就是采用这种方法来教授英…

三相LCL并网逆变器—为什么采用LCL滤波器

1.为什么需要滤波器 当前并网逆变器大多采用脉冲宽度调制(PWM)技术&#xff0c;导致桥臂输出的电压中存在开关频率及倍数频率次的谐波电压&#xff0c;进而使得输出到电网的电流中含有谐波。从电网的角度来看&#xff0c;是不希望系统内含有高次谐波的&#xff0c;因为这会影响…

【STM32】按键控制LED 光敏传感器控制蜂鸣器

文章目录 前置知识按键介绍传感器模块硬件电路按键硬件电路传感器模块硬件电路 C语言数据类型在Keil中的对应写法C语言枚举 按键控制LED接线图Hardware文件夹&#xff08;模块化编程&#xff09;LED驱动程序封装Key(按键)驱动程序封装 main.c源文件 光敏传感器控制蜂鸣器接线图…

飞书API-获取tenant_access_token

1.在飞书工作台创建应用&#xff0c;跳到开发者后台&#xff0c;选创建企业自建应用 2.设置并发布应用 必须要发布应用才可以开始使用了&#xff01;&#xff01;&#xff01; 3.调用获取token的API 参考链接&#xff1a; 开发文档 - 飞书开放平台https://open.feishu.cn/do…

SpringBoot篇(自动装配原理)

目录 一、自动装配机制 1. 简介 2. 自动装配主要依靠三个核心的关键技术 3. run()方法加载启动类 4. 注解SpringBootApplication包含了多个注解 4.1 SpringBootConfiguration 4.2 ComponentScan 4.3 EnableAutoConfiguration 5. SpringBootApplication一共做了三件事 …