QT6 c++高仿QQ--1. 企业级即时通讯系统架构
一、整体架构
即时通信主要功能提供人与人远程沟通的消息[文字、图片、截屏]/语音/视频/文件传输等功能。考虑到网络比较复杂,包括家庭网络,公司网络,机场/车站等公共网络,移动网络,涉及到私有网络与公网直接的通信,系统架构为CS架构,如图:
二、客户端软件
客户端软件包含两个部分:
- host后台服务进程:windows采用service服务模式,linux为后台独立进程,采用C++语言开发,epoll[linux、mac]/iocp[windows]网络通信,sqlite3本地数据库,host与ui的进程通信,host与服务器端网络通信以及host与ui进程通信消息编码采用protobuf,aes消息数据加密,等主要技术;客户端与服务器的用户采用 SRP (Secure Remote Password)安全远程密码认证实现,保障用户认证安全性。
- irtc-client客户端UI软件:客户端UI采用QT6 C++ QWidget开发,此部分为本专题主要介绍的内容。
三、服务端软件server
服务端完成用户管理,消息转发,消息存储,语音和视频通信数据转发等功能,服务端90%采用C++语言开发,web用户管理部分采用drogon框架+vue+element UI。
服务端主要技术:
- 用户管理/消息转发服务,语音通信,视频会议服务等独立服务部署,支持服务集群
- 采用redis缓存
- 服务端采用mysql进行消息,用户,语音/视频数据存储
- 消息队列采用kafka
- 支持http/https web端用户管理,采用drogon开源服务端框架
- 服务端epoll/IOCP网络通信,可以部署到window和linux服务器
四、本专题重要说明
本专题主要是QT6 C++ QWidget实现高仿QQ UI和相关功能介绍,供QT初学者和有一定QT c++开发经验需要进一步学习做企业级客户端软件的工程师学习提高。host和server部分不是本专题的重点。主要功能
- 无边框主界面,自定义最大最小化/关闭功能
- 左侧工具栏中间消息/通信录导航+右侧内容展示三分屏主界面
- 左侧导航工具条:自定义QWidget
- 主要功能:个人信息、聊天、会议、设置、其他、与host和服务端通信状态
- 导航按钮:字体图标+文字+提示的按钮
- 导航按钮状态切换:hover、选中、非选中状态不同颜色展示
- 使用QStackWidget完成各个重要功能切换
- 个人信息:
- 非模态对话框:个人头像/id/在线状态、性别、年龄、地址、签名
- 鼠标点击主窗口自动关闭个人信息显示
- 编辑个人信息自动关闭个人信息QDialog
- 中间消息导航列表:自定义QListwidget展示复杂图片+不同大小颜色文字
- 好友头像,昵称,最新聊天信息,最新聊天信息时间展示
- 选中好友右侧内容区切换到对应的聊天信息
- 中间通信录导航自定义QWidget
- 包含搜索、好友通知、QTreeWidget树,树的一级为分组:设备列表、好友列表、我加入的群列表、我创建的群列表,二级展示对应的设备列表、好友列表、群列表
- 自定义不同类型树导航QTreeWidgetItem
- 不同类型间选中/非选中状态切换,保障
- 不同类型的导航选中的右侧内容不同展示,包括消息通知、快捷按钮、设备列表、好友列表、群列表、自定义好友分组
- 右侧聊天主界面,title+聊天内容展示+聊天信息输入三分屏
- 上面QPushbutton按钮组:文字title+字体图标快捷功能按钮+功能提示
- 中间自定义QListWidget:展示复杂聊天信息,自定义QListWidgetItem
- 消息内容:消息来源的头像和昵称[群聊]+消息+时间
- 消息状态切换:选中/非选中/鼠标hover不同颜色展示
- 某个好友的聊天导航被选中,右侧消息内容切换展示对应好友的聊天信息
- 软件启动根据好友列表/群列表从本地sqlite3数据库中加载好友与群聊天导航列表
- 消息状态:撤回状态、选中、非选中状态切换,根据鼠标焦点是否在QListWidgetItem动态改变消息选中,比如从消息选中时,焦点切换到消息输入
- 选中消息:右键菜单:撤回/转发/复制/引用/删除等功能
- 发送的与收到消息的分两边显示,不同颜色展示,系统消息不同颜色和中间位置展示
- 动态增删自定义Widget中部分部件
- 消息内容根据QListWidget大小变化而动态变化QListWidgetItem位置
- 初始聊天内容最多加载10条,根据滚动条动态加载本地数据库sqlite3中的聊天消息
- 下面聊天信息输入,自定义QTextEdit
- 捕捉剪贴板/回车按键/ alt shift + enter组合键
- 插入剪贴板的内容到编辑框,以不同颜色只读状态展示
- 插入聊天信息列表中拷贝的消息
- 根据编辑框是否有内容改变发送按钮的颜色
- 可以发送表情、文字、图片、todo:文件、语音、短视频等内容
- 右侧好友通知QListWidget
- 自定义QListWidget展示新加好友信息:头像、昵称、主动或被动、时间,邀请状态
- 根据主动邀请或被动邀请状态动态删减QWidget
- 点击接受按钮动态增加或删除小QWidget部件
- 点击好友头像弹出非模态QDialog展示好友详细信息
- 右侧设备信息展示:OS、CPU核数、CPUID、主板信息、HD信息
- 右侧好友信息展示:头像、昵称、id,在线状态、好友签名、所属分组,聊天快捷按钮
- 右侧群信息展示:群头像、群名、群的描述、我对群的备注、我在群的昵称、群成员,人数,进入群聊快捷按钮