8.21Qt作业

运用网络通信,实现简单聊天室

客户端主要代码

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    , socket(new QTcpSocket(this))
{
    ui->setupUi(this);
    //初始化界面
    ui->msgEdit->setEnabled(false);
    ui->sendbtn->setEnabled(false);
    ui->offbtn->setEnabled(false);
    connect(socket,&QTcpSocket::connected,this,&Widget::connect_slots);

    connect(socket,&QTcpSocket::readyRead,this,&Widget::read_slots);

    connect(socket,&QTcpSocket::disconnected,this,&Widget::offend_slots);


}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_connectbtn_clicked()
{
    QString ip= ui->ipEdit->text();
    quint16 port=ui->portEdit->text().toUInt();//字符串转换为整型
    //让客户端连接服务器
    socket->connectToHost(ip,port);

}

void Widget::connect_slots()
{
    userName = ui->usernameEdit->text();
    QString msg = userName+":进入聊天室";
    socket->write(msg.toLocal8Bit());
    QMessageBox::information(this,"","连接成功");

    ui->msgEdit->setEnabled(true);
    ui->sendbtn->setEnabled(true);
    ui->offbtn->setEnabled(true);

    ui->usernameEdit->setEnabled(false);
    ui->ipEdit->setEnabled(false);
    ui->portEdit->setEnabled(false);
    ui->connectbtn->setEnabled(false);
}

void Widget::read_slots()
{
    QByteArray msg=socket->readAll();
    QString mag=(QString::fromLocal8Bit(msg));
    if(mag==msgsend){
        QListWidgetItem *item = new QListWidgetItem(mag);
                item->setTextAlignment(Qt::AlignRight);
        ui->listWidget->addItem(item);
        ui->sendbtn->setEnabled(true);
        killTimer(id);
        ui->msgEdit->clear();
    }else{ ui->listWidget->addItem(mag);
    }

}
void Widget::on_sendbtn_clicked()
{
    msgsend=ui->msgEdit->text();
    msgsend = userName + " :" +msgsend;
    id=startTimer(500);
    ui->sendbtn->setEnabled(false);
    socket->write(msgsend.toLocal8Bit());
}
void Widget::timerEvent(QTimerEvent *e)
{
    if(e->timerId()==id)
    {
        ui->sendbtn->setEnabled(true);
        killTimer(id);
    }
}

void Widget::offend_slots()
{
    ui->usernameEdit->setEnabled(true);
    ui->ipEdit->setEnabled(true);
    ui->portEdit->setEnabled(true);
    ui->connectbtn->setEnabled(true);
    ui->msgEdit->setEnabled(false);
    ui->offbtn->setEnabled(false);
    ui->sendbtn->setEnabled(false);

}
void Widget::on_offbtn_clicked()
{
    QString msg =userName +":离开聊天室";

    socket->write(msg.toLocal8Bit());

    //断开连接
    socket->disconnectFromHost();
}

实现效果

相关推荐
Allen_LVyingbo1 天前
医疗AI多智能体资源调度:用Python构建高性能MCU资源池
开发语言·人工智能·python·算法·知识图谱·健康医疗
weixin_446260851 天前
[特殊字符] Pathway:高效的Python ETL框架,助力实时数据处理与分析
开发语言·python·etl
郑州光合科技余经理1 天前
从国内到海外:同城o2o本地生活服务平台国际化实战
java·开发语言·javascript·mysql·uni-app·php·生活
Hcoco_me1 天前
大模型面试题48:从白话到进阶详解LoRA 中 r 和 alpha 参数
开发语言·人工智能·深度学习·算法·transformer·word2vec
啥都不懂的小小白1 天前
ES6常用新特性
开发语言·javascript·es6
CSDN_RTKLIB1 天前
强制类型转换取整规则
开发语言·c++
郝学胜-神的一滴1 天前
QStyleOption:Qt样式系统之魂
开发语言·c++·qt·程序人生
木卫二号Coding1 天前
第七十二篇-V100-32G+WebUI+Flux.1-Schnell+Lora+文生图
开发语言·人工智能·python
墨笔之风1 天前
基于python 实现的小游戏
开发语言·python·pygame
予枫的编程笔记1 天前
Elasticsearch 全面解析:从原理到实战的分布式搜索引擎指南
java·开发语言·分布式·后端·elasticsearch·搜索引擎·全文检索