Qt 网络聊天室项目

项目视频演示:点这里

项目源码:点这里


项目概述

项目定位

基于 Qt 框架开发的多人实时网络聊天室,旨在实现稳定、易用的跨平台即时通信功能,满足小型团队或内部协作的沟通需求。

核心目标

  • 支持20 人客户端同时在线
  • 实现用户身份验证与账户管理
  • 在聊天室可以进行群聊
  • 提供聊天历史记录存储与查询
  • 生成持久化的log日志
  • 生成可直接部署的安装包,降低使用门槛

核心功能模块

功能模块 实现要点 技术支撑
1. 用户登录与账户管理 - 支持账号注册(检测账号唯一性)- 支持账号登录(密码验证)- 账户数据持久化存储 SQLite 数据库(account 表)、Qt SQL
2. 多人实时聊天 - 实时接收 / 发送消息- 消息携带日期 + 时间戳(格式:yyyy/MM/dd hh/mm)- 全员消息广播 Qt Network(TCP)、多线程
3. 聊天历史记录 - 自动存储所有聊天消息- 支持关键词模糊查询(如 "会议""文件")- 查询结果可视化展示 SQLite 数据库(history 表)、字符串匹配
4. 界面交互优化 - 登录 / 注册按钮状态联动(空输入时禁用)- 发送 / 查询按钮动态启用(非空输入触发)- 弹窗提示操作结果(如 "注册成功""密码错误") Qt Widgets、信号与槽机制

技术架构

技术栈选型

技术领域 具体组件 / 工具 作用说明
开发框架 Qt 5.x(推荐 5.4+) 提供 UI、网络、数据库、线程的一站式支持
网络通信 Qt Network(QTcpServer/QTcpSocket) 基于 TCP 协议实现客户端 - 服务器双向通信
数据存储 SQLite 数据库 本地轻量数据库,存储账户(account)与历史记录(history)
线程处理 QThread + Worker 线程 分离网络通信与 UI 渲染,避免界面卡顿
打包工具 Inno Setup Compiler + windeployqt 补充动态链接库、生成 Windows 安装包

架构流程图(示意)

plaintext 复制代码
客户端(Dialog登录页 → ChatRoom聊天页) 
        ↕(TCP通信)
服务器端(QTcpServer → 多客户端管理)
        ↕(数据读写)
SQLite数据库(account表 + history表)

核心代码实现(关键模块)

数据库模块(database.cpp)

账户与历史记录的增删改查

  • 数据库初始化

    :自动创建

    复制代码
    clientInfo.db

    ,若成功则生成 2 张核心表:

    • account表:字段(id - 自增主键,account - 账号,pswd - 密码)
    • history表:字段(id - 自增主键,msg - 聊天消息(含时间戳))
  • 关键接口示例

    cpp 复制代码
    // 登录验证(返回0=成功,-1=账号不存在,-2=密码错误)
    int DataBase::login_accountTable(QString account, QString pswd) {
        if (!isAccountExist(account)) return -1;
        QString sql = "SELECT pswd FROM account WHERE account=?";
        // 预处理SQL,避免注入风险
        QSqlQuery sq;
        sq.prepare(sql);
        sq.addBindValue(account);
        // ... 密码比对逻辑 ...
    }
    
    // 插入聊天记录
    void DataBase::insertData_historyTable(QString msg) {
        QString sql = "INSERT INTO history(msg) VALUES(:msg)";
        QSqlQuery sq;
        sq.prepare(sql);
        sq.bindValue(":msg", msg); // 消息格式:"2025/07/08 16:33\n张三说:大家好"
        sq.exec();
    }

网络通信模块(network.cpp)

核心功能:服务器端连接管理与消息分发

  • 服务端初始化

    :监听 8887 端口,接收客户端连接请求:

    cpp 复制代码
    void Network::initServer() {
        server = new QTcpServer(this);
        bool ret = server->listen(QHostAddress::Any, 8887);
        if (ret) {
            emit progressUpdate(ProgressReport::listenSucceed); // 通知UI监听成功
            connect(server, SIGNAL(newConnection()), this, SLOT(newConnection_slot()));
        } else {
            emit progressUpdate(ProgressReport::listenErr);
        }
    }
  • 消息处理逻辑:按协议解析客户端数据(如 "login | 账号 | 密码""send | 时间 | 消息"),分发至对应处理函数(登录 / 注册 / 消息广播 / 历史查询)。

UI 交互模块(chatroom.cpp/dialog.cpp)

  • 登录界面(Dialog):实现账号 / 密码输入、注册 / 登录按钮切换,空输入时弹窗警告。

  • 聊天界面(ChatRoom)

    • 发送按钮:输入非空时启用,发送消息自动携带时间戳。
    • 查询按钮:输入关键词时启用,查询结果在 "历史记录" 面板展示。
    • 消息展示:接收的全员消息实时追加至 "聊天面板",格式清晰。

总结与拓展

项目亮点

  1. 功能完整性:覆盖 "登录 - 聊天 - 记录 - 部署" 全流程,满足基础通信需求;
  2. 技术规范性:采用 Qt 信号槽、多线程、网络、SQLite 预处理等最佳实践,代码可维护性高;
  3. 可部署性:通过打包流程生成独立安装包,用户无需配置开发环境即可使用。

优化方向

  • 视觉处理:OpenCV(实现头像识别、表情包生成);
  • 三维交互:OpenGL(开发聊天室场景化界面);
  • 性能优化:多线程 / 多进程(提升高并发下的消息处理速度);
  • 硬件交互:串口通信(结合硬件设备发送消息);
  • 多媒体:音视频流(拓展语音 / 视频聊天功能);
  • 扩展私聊和文件传输功能
  • 样式美化

拓展项目建议

计算器、表格处理工具、音乐播放器、串口调试工具(基于本项目技术栈可快速实现)。

相关推荐
三体世界3 小时前
Qt从入门到放弃学习之路(1)
开发语言·c++·git·qt·学习·前端框架·编辑器
zhaoxiao-m0_赵笑3 小时前
一体化液位水温传感器的应用环境介绍 液位传感器
网络·物联网
Wang's Blog8 小时前
Linux小课堂: 网络配置详解之DHCP动态分配与静态IP地址设置
linux·网络·tcp/ip
fat house cat_12 小时前
【netty】基于主从Reactor多线程模型|如何解决粘包拆包问题|零拷贝
java·服务器·网络·netty
天***889612 小时前
HTTP 协议的常用方法有哪些?(GET、POST、PUT、DELETE、PATCH)各自的作用和区别是什么?
网络·网络协议·http
xixixi7777713 小时前
信息安全和网络安全的区分在哪
网络·安全·web安全·信息安全
上海云盾第一敬业销售14 小时前
游戏盾和高防IP的差异与选择
网络·tcp/ip·游戏
程序员大柱15 小时前
推荐一个免费的IP地址库:纯真社区版IP库
网络·网络协议·tcp/ip
Tony Bai15 小时前
【Go 网络编程全解】14 QUIC 与 HTTP/3:探索下一代互联网协议
开发语言·网络·后端·http·golang