qt day 6

#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->disconnectbtn->setEnabled(false);
    //如果客户端成功连接服务器,那么客户端就会自动发送一个connect()信号
    //我们就可以将该信号连接到自定义的槽函数处理逻辑代码,由于只需要连接一次,所以连接函数可以写在构造函数中
    connect(socket,&QTcpSocket::connected,this,&Widget::babymonster_slot);
    //如果服务器向客户端发来数据,那么客户端就会自动发送一个readready()信号
    //我们就可以将该信号连接到自定义的槽函数中,读取服务器发来的数据,由于只需要连接一次,所以连接函数写在构造函数中
    connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
    //如果我们成功与服务器连接,那么客户端就会自动发送disconnect信号
    //我们就可以将该信号连接到自定义的槽函数中 处理逻辑代码,由于只需要连接一次,所以可以写在构造函数中
   connect(socket, &QTcpSocket::disconnected, this, &Widget::disconnect_slot);
}

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

//连接服务器按钮对应的槽函数
void Widget::on_connectbtn_clicked()
{
    //获取ui界面的ip和端口
    QString ip=ui->ipedit->text();
    quint16 port=ui->portedit->text().toUInt();//将字符串转换为整形
    //让客户端连接服务器
    //virtual void connectToHost(const QHostAddress &address, quint16 port, OpenMode mode = ReadWrite);
    //参数1:连接服务器的IP地址
    //参数2:连接服务器的端口号
    socket->connectToHost(ip,port);
}
void Widget::babymonster_slot(){
    username=ui->usernameedit->text();
    //告诉服务器我来了
    msg1=username+":宝怪进入聊天室";
    socket->write(msg1.toLocal8Bit());
    ui->msgedit->setEnabled(true);
    ui->sendbtn->setEnabled(true);
    ui->disconnectbtn->setEnabled(true);

    ui->usernameedit->setEnabled(false);
    ui->ipedit->setEnabled(false);
    ui->portedit->setEnabled(false);
    ui->connectbtn->setEnabled(false);

}
//发送按钮对应的槽函数
void Widget::on_sendbtn_clicked()
{
    //获取ui界面上的文本
    msg2=username+":"+ui->msgedit->text();
    socket->write(msg2.toLocal8Bit());
    ui->msgedit->clear();

}

void Widget::readyRead_slot(){
    QByteArray msg= socket->readAll();
    if(QString::fromLocal8Bit(msg)==msg3||QString::fromLocal8Bit(msg)==msg2||QString::fromLocal8Bit(msg)==msg1){
       QListWidgetItem *item = new QListWidgetItem(QString::fromLocal8Bit(msg));
       item->setTextAlignment(Qt::AlignRight);
       ui->listWidget->addItem(item);
   }
//    QListWidgetItem *listItem = new QListWidgetItem(QString::fromLocal8Bit(msg));

//              // 设置对齐方式(例如右对齐)
//              listItem->setTextAlignment(Qt::AlignRight);

//              // 添加项目到 QListWidget
//              ui->listWidget->addItem(listItem);


    else{
    ui->listWidget->addItem(QString::fromLocal8Bit(msg));
    }
}
//断开连接按钮对应的槽函数
void Widget::on_disconnectbtn_clicked()
{
    //告诉服务器  我离开了
     msg3=username+":完美闪避";
    socket->write(msg3.toLocal8Bit());
    //断开与服务器的链接
    // virtual void disconnectFromHost();(虚函数)
    socket->disconnectFromHost();
}
void Widget::disconnect_slot(){
    ui->msgedit->setEnabled(false);
    ui->sendbtn->setEnabled(false);
    ui->disconnectbtn->setEnabled(false);

    ui->usernameedit->setEnabled(true);
    ui->ipedit->setEnabled(true);
    ui->portedit->setEnabled(true);
    ui->connectbtn->setEnabled(true);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值