#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->pushButton->setEnabled(false);
ui->lineEdit->setEnabled(false);
ui->disconnectBtn->setEnabled(false);
connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);
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()
{
//获取ip,port
QString ip = ui->ip_L->text();
quint16 port = ui->port_L->text().toUInt();
//让客户端连接服务器
socket->connectToHost(ip,port);
//如果客户端连接成功,客户端自动发送一个connected()信号
}
//connected信号对应的槽函数
void Widget::connected_slot()
{
userName = ui->user_L->text();
//告诉服务器谁来了
QString msg = userName+":进入聊天室";
//将信息发给服务器
socket->write(msg.toLocal8Bit());
ui->pushButton->setEnabled(true);
ui->lineEdit->setEnabled(true);
ui->disconnectBtn->setEnabled(true);
ui->connectBtn->setEnabled(false);
ui->port_L->setEnabled(false);
ui->user_L->setEnabled(false);
ui->ip_L->setEnabled(false);
}
//发送按钮的槽函数
void Widget::on_pushButton_clicked()
{
//获取ui界面上的文本
msg1 = userName + ":" + ui->lineEdit->text();
//将信息发给服务器
socket->write(msg1.toLocal8Bit());
//清空
ui->lineEdit->clear();
}
void Widget::readyRead_slot()
{
QByteArray msg = socket->readAll();
if(msg1==QString::fromLocal8Bit(msg))
{
item = new QListWidgetItem(ui->listWidget);
item->setText(QString::fromLocal8Bit(msg));
item->setTextAlignment(Qt::AlignRight);
ui->listWidget->addItem(item);
}
else
{
//将读取到的数据放到ui界面上
ui->listWidget->addItem(QString::fromLocal8Bit(msg));
}
}
//断开连接按钮对应的槽函数
void Widget::on_disconnectBtn_clicked()
{
//告诉服务器撤了
QString msg = userName + ":离开聊天室";
socket->write(msg.toLocal8Bit());
socket->disconnectFromHost();
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTcpSocket>
#include <QListWidgetItem>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_connectBtn_clicked();
void connected_slot();
void readyRead_slot();
void on_pushButton_clicked();
void on_disconnectBtn_clicked();
void disconnected_slot();
private:
Ui::Widget *ui;
QTcpSocket *socket;
QString userName;//存放用户名
QString msg1;
QListWidgetItem *item;
};
#endif // WIDGET_H