# QT聊天软件客户端 **Repository Path**: Jaklin/qt-chat-software-client ## Basic Information - **Project Name**: QT聊天软件客户端 - **Description**: 客户端 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-19 - **Last Updated**: 2025-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WeChat 客户端 基于 Qt 开发的桌面即时通讯客户端,提供类似微信的聊天体验。 ## 📋 项目简介 这是一个功能完整的桌面即时通讯客户端,支持账号注册、登录、好友管理、单聊消息、离线消息等功能。采用 Qt 框架开发,界面美观,交互流畅。 ## ✨ 功能特性 ### 账号系统 - ✅ 用户注册(账号、密码、昵称) - ✅ 用户登录(自动连接服务器) - ✅ 密码验证与错误提示 - ✅ 用户协议确认 ### 好友管理 - ✅ 发送好友申请 - ✅ 接收/处理好友申请(接受/拒绝) - ✅ 好友申请红点提醒 - ✅ 查看联系人资料 - ✅ 删除联系人(双向删除) - ✅ 联系人列表实时更新 ### 聊天功能 - ✅ 单聊消息发送/接收 - ✅ 聊天记录历史查看 - ✅ 消息时间戳显示(今天/昨天/完整日期) - ✅ 未读消息计数 - ✅ 离线消息接收 - ✅ Enter 发送,Shift+Enter 换行 - ✅ 消息气泡样式(发送/接收) ### 个人资料 - ✅ 编辑个人资料(昵称、省份) - ✅ 头像上传与管理 - ✅ 资料同步到服务器 - ✅ 联系人资料查看(只读) ### 网络与连接 - ✅ 自动连接服务器 - ✅ 断线自动重连(指数退避策略) - ✅ 连接状态提示 - ✅ 错误信息友好显示 ### UI/UX 特性 - ✅ 无边框窗口设计 - ✅ 窗口拖拽移动 - ✅ 圆角与阴影效果 - ✅ 联系人点击动画 - ✅ 侧边栏按钮交互反馈 - ✅ 滚动条自动隐藏 - ✅ 平滑滚动体验 - ✅ 响应式布局 ## 🛠️ 技术栈 - **框架**: Qt 5.x / Qt 6.x - **语言**: C++11 - **网络**: QTcpSocket(TCP 长连接) - **数据格式**: JSON - **UI**: Qt Widgets + 自定义控件 ## 📦 依赖要求 - Qt 5.12+ 或 Qt 6.x - C++11 或更高版本编译器 - CMake 或 qmake(推荐使用 Qt Creator) ## 🔨 编译与运行 ### 使用 Qt Creator 1. 打开 Qt Creator 2. 选择 `文件` → `打开文件或项目` 3. 选择 `wechat.pro` 文件 4. 配置构建套件(Kit) 5. 点击 `构建` → `运行` ### 使用命令行 ```bash # 进入项目目录 cd wechat # 生成 Makefile qmake wechat.pro # 编译 make # Linux/Mac # 或 mingw32-make # Windows MinGW # 运行 ./wechat # Linux/Mac # 或 wechat.exe # Windows ``` ## 📁 项目结构 ``` wechat/ ├── main.cpp # 程序入口,窗口管理与信号连接 ├── mainwindow.cpp/h # 主窗口基类(无边框窗口基类) ├── loginwindow.cpp/h/ui # 登录窗口 ├── registerwindow.cpp/h/ui # 注册窗口 ├── chatwindow.cpp/h/ui # 聊天主窗口 ├── networkmanager.cpp/h # 网络通信管理器(核心) ├── contactwidget.cpp/h/ui # 联系人列表项控件 ├── sendwidget.cpp/h/ui # 发送消息气泡控件 ├── recvwidget.cpp/h/ui # 接收消息气泡控件 ├── profiledialog.cpp/h # 个人资料对话框 ├── friendrequestdialog.cpp/h # 好友申请对话框 ├── addcontactdialog.cpp/h # 添加联系人对话框 ├── animation.cpp/h # 窗口切换动画 ├── wechat.pro # Qt 项目文件 ├── img.qrc # 资源文件 └── userdata/ # 用户数据目录(运行时生成) ├── profile/ # 个人资料(昵称、省份等) └── avatars/ # 头像文件 ``` ## 🚀 使用说明 ### 首次使用 1. **启动客户端** - 运行编译后的可执行文件 - 默认连接服务器地址:`localhost:8888` 2. **注册账号** - 点击登录窗口的"注册"按钮 - 填写账号、密码(至少6位)、确认密码、昵称 - 勾选隐私政策 - 点击"注册"按钮 3. **登录** - 输入账号和密码 - 勾选用户协议 - 点击"登录"按钮 - 登录成功后自动进入聊天界面 ### 主要功能操作 #### 添加好友 1. 点击左侧工具栏的"通讯录"图标(或点击"+"按钮) 2. 输入对方账号 3. 点击"发送申请" 4. 等待对方接受申请 #### 处理好友申请 1. 点击左侧工具栏的"通讯录"图标 2. 查看好友申请列表 3. 选择"接受"或"拒绝" #### 发送消息 1. 在左侧联系人列表中选择一个联系人 2. 在底部输入框输入消息 3. 按 `Enter` 发送,`Shift+Enter` 换行 4. 或点击"发送"按钮 #### 查看聊天记录 - 选择联系人后,聊天记录会自动加载显示 - 支持滚动查看历史消息 #### 编辑个人资料 1. 点击左侧工具栏顶部的头像按钮 2. 编辑昵称、省份 3. 点击"选择头像"上传头像 4. 点击"保存"按钮 #### 删除联系人 1. 右键点击联系人列表中的某个联系人 2. 选择"删除联系人" 3. 确认删除 ## ⚙️ 配置说明 ### 服务器地址配置 默认服务器地址在 `loginwindow.cpp` 和 `registerwindow.cpp` 中设置: ```cpp m_serverHost("localhost") m_serverPort(8888) ``` 如需修改,请编辑对应源文件并重新编译。 ### 数据存储位置 - **个人资料**: `程序目录/userdata/profile/<用户名>.json` - **头像文件**: `程序目录/userdata/avatars/<用户名>.png` - **临时文件**: `程序目录/userdata/temp/` ## 🔌 通信协议 客户端与服务端通过 TCP 连接,使用 JSON 格式进行通信。 ### 消息格式 每条消息为一行 JSON,以 `\n` 分隔: ```json {"type":"login","username":"user1","password":"123456"} ``` ### 主要消息类型 - `login`: 登录请求 - `register`: 注册请求 - `message`: 发送聊天消息 - `getContacts`: 获取联系人列表 - `getChatHistory`: 获取聊天记录 - `friendRequest`: 发送好友申请 - `acceptFriendRequest`: 接受好友申请 - `rejectFriendRequest`: 拒绝好友申请 - `updateProfile`: 更新个人资料 详细协议说明请参考服务端文档。 ## ⚠️ 注意事项 1. **首次运行前确保服务端已启动** - 客户端默认连接 `localhost:8888` - 如服务端未启动,会显示连接错误 2. **网络连接** - 客户端支持自动重连 - 断线后会自动尝试重连(最多重试一定次数) - 重连成功后会自动重新登录 3. **数据安全** - 当前版本密码以明文传输(仅用于学习演示) - 生产环境请使用加密传输和密码哈希 4. **文件路径** - 用户数据存储在程序运行目录下的 `userdata` 文件夹 - 请确保程序有读写权限 5. **窗口操作** - 窗口支持拖拽移动(点击标题栏区域) - 支持最小化、最大化、关闭操作 ## 🐛 常见问题 ### Q: 无法连接到服务器? A: 检查服务端是否已启动,端口是否为 8888,防火墙是否阻止连接。 ### Q: 登录后看不到联系人? A: 确保已添加好友,或联系服务端管理员检查用户数据。 ### Q: 消息发送失败? A: 检查网络连接状态,确保已选择联系人,消息内容不为空。 ### Q: 窗口无法拖动? A: 确保点击的是窗口标题栏区域,而不是内容区域。 ## 📝 开发说明 ### 核心模块 - **NetworkManager**: 负责所有网络通信,封装协议细节 - **chatwindow**: 主聊天界面,管理联系人列表和消息显示 - **contactwidget**: 自定义联系人控件,支持动画和状态显示 ### 信号与槽机制 客户端大量使用 Qt 的信号/槽机制实现模块间通信: - `NetworkManager` 发出信号:`loginSuccess`、`contactsUpdated`、`chatMessageReceived` 等 - UI 层通过槽函数响应这些信号,更新界面 ### 扩展开发 如需添加新功能: 1. 在 `NetworkManager` 中添加新的网络请求方法 2. 在 `handleMessage` 中处理服务器响应 3. 在 UI 层添加对应的界面和交互逻辑 ## 📄 许可证 本项目仅供学习交流使用。 ## 👥 贡献 欢迎提交 Issue 和 Pull Request! --- **版本**: 1.0 **最后更新**: 2025