基于TCP、QT制作的小型聊天系统

该博客介绍了使用QT和TCP协议开发的一款小型聊天系统,具备好友列表刷新、单聊(文字和图片)、消息时间记录、虚拟键盘、实时时钟、手写画板功能。手写画板支持痕迹粗细和颜色调整,并能截图保存。聊天窗口大小可调,但目前存在无法保存图片消息记录的问题。客户端登录界面限制错误密码输入次数,登录后能自动弹出和隐藏虚拟键盘。代码已上传至CSDN供下载学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


实现功能:

  • 好友列表刷新功能
  • 单聊(发送消息、发送图片)
  • 接收到的消息均有系统时间记录
  • 虚拟键盘(利用事件过滤器,设置在点击编辑框时虚拟键盘才会自动弹出)
  • 实时时钟显示(利用定时器,持续获取系统时间)
  • 手写画板(利用了QT中的事件、能更改痕迹的粗细大小、更改笔的颜色、截图保存此绘画)
  • 收消息框、写消息框、好友列表框均可手动调整大小(QT中设置这些输入框布局  分列式垂直水平布局)
  • 截图 、消息记录

尚存BUG:

        保存消息记录时还不能保存图片数据。

Client  客户端登录界面代码

  • 如果密码输入三次错误、密码输入栏会自动锁死
  • 因为初学时为了理解学习、此界面没有使用UI设计师设计、而是采用纯代码编辑
  • 默认自动弹出虚拟键盘、如果点击输入栏以外的位置会隐藏虚拟键盘

 

#include "longinwindow.h"
#include "ui_longinwindow.h"
#include <QDebug>

LonginWindow::LonginWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::LonginWindow)
{
    ui->setupUi(this);


    //this->setStyleSheet("background-color: rgb(255, 255, 255);");
    this->setStyleSheet("LonginWindow{border-image: url(:/new/prefix1/1.jpg);}");

    //this->show();

    usrline=new QLineEdit(this);
    //指定输入框显示的位置
    usrline->setGeometry(100,20,250,30);
    usrline->show();

    //创建一个输入框框对象
    passline = new QLineEdit (this);
    //隐藏输入的密码
    passline->setEchoMode(QLineEdit::Password);
    //指定输入框显示的位置
    passline->setGeometry(100,80,250,30);
    passline->show();


    usrline->installEventFilter(this);      //给用户输入栏添加事件过滤器
    passline->installEventFilter(this);

    //创建一个标签表示用户名
    usrlb =new QLabel(this);
    //QPalette pa;
    //定义字体对象
    QFont myfont;
    myfont.setPixelSize(20);            //设置字体大小
    myfont.setFamily("KaiTi");          //将字体设置为楷体
    //myfont.setBold(75);       //也能设置字体加粗,只是会报错截断
    myfont.setWeight(75);       //设置字体加粗

    usrlb->setStyleSheet("color:red;");          //将字体设置为红色
    //color: rgb(255, 0, 0);  //设置字体颜色
    usrlb->setFont(myfont);
    usrlb->setText("用户:");
    usrlb->setGeometry(10,20,50,30);
    usrlb->show();

    //创建一个标签表示密码

    passlb = new QLabel("密码: ",this);
    myfont2.setPixelSize(20);
    passlb->setStyleSheet("color:red;");          //将字体设置为红色
    passlb->setFont(myfont2);
    passlb->setGeometry(10,80,50,30);            //设置标签位置
    passlb->show();

    //登陆按钮

    lgbt = new QPushButton(QIcon(":/new/prefix1/2.jpg"),"登陆",this);
    lgbt->setGeometry(140,150,70,30);
    lgbt->show();

    //注册按钮

    resbt = new QPushButton(QIcon(":/new/prefix1/3.jpg"),"注册",this);
    resbt->setGeometry(270,150,70,30);
    resbt->show();

    connect(lgbt, SIGNAL(clicked(bool)), this ,
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值