QT DAY6

QT DAY6_第1张图片

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    socket = new QTcpSocket(this);
    //如果连接服务器成功,该客户端就会发射一个connected的信号。
    //我们可以将信号连接到自定义的槽函数中处理相关逻辑
    //由于该链接只需连接一次,所以卸载构造函数中即可
    connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);
    //客户端与服务器连接后,如果服务器想客户端发来数据,那么该客户端就会自动发送一个readRead信号
    //我们可以将该信号连接到自定义的槽函数中处理相关逻辑
    connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
    connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);
}

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


void Widget::on_connectBtn_clicked()
{
    //获取ui界面的信息
    userName = ui -> usernameEdit -> text();
    QString hostName = ui -> ipEdit -> text();
    quint16 port = ui -> portEdit ->text().toUInt();

    //调用函数连接到主机
    socket -> connectToHost(hostName,port);

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

void Widget::connected_slot(){
    QMessageBox::information(this,"成功","连接服务器成功");
    QString msg = userName +"进入聊天室";
    socket -> write(msg.toLocal8Bit());
}

void Widget::readyRead_slot(){
    //读取该客户端信号对应槽函数的实现
    QByteArray msg = socket ->readAll();
    ui -> msgList -> addItem(QString::fromLocal8Bit(msg));

}


void Widget::on_sendBtn_clicked()
{
    QString m = ui ->msgEdit ->text();
    QString msg = userName + ":"+m;
    socket -> write(msg.toLocal8Bit());

    ui -> msgEdit -> clear();

}

//断开服务器按钮对应的槽函数
void Widget::on_disConnectBtn_clicked()
{
    QString msg = userName + ":离开聊天室";
    socket -> write(msg.toLocal8Bit());
    //调用成员函数disconnectFromHost
    //功能:断开客户端与服务器的连接
    socket -> disconnectFromHost();
    //当客户端与服务器断开连接后,该客户端就会发射一个disconnected的信号
    //我们可以将该信号与自定义的槽函数连接
    ui ->ipEdit -> setEnabled(true);
    ui ->portEdit -> setEnabled(true);
    ui ->connectBtn -> setEnabled(true);
    ui ->usernameEdit -> setEnabled(true);
}

void Widget::disconnected_slot(){
    QMessageBox::information(this,"退出","断开成功");
}

你可能感兴趣的:(qt,开发语言)