#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->sendButton->setEnabled(false);
ui->disConnectButton_3->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_connectButton_2_clicked()
{
QString ip = ui->ipEdit->text();
quint16 port = ui->portEdit_4->text().toUInt();
socket->connectToHost(ip,port);
}
void Widget::connected_slot()
{
userName = ui->usernameEdit->text();
//组织一下语言
QString msg = userName + ": 进入聊天室";
//告诉服务器 我来了
socket->write(msg.toLocal8Bit());
ui->msgEdit->setEnabled(true); //设置可以状态
ui->sendButton->setEnabled(true);
ui->disConnectButton_3->setEnabled(true);
ui->usernameEdit->setEnabled(false);//设置不可以状态
ui->ipEdit->setEnabled(false);
ui->portEdit_4->setEnabled(false);
ui->connectButton_2->setEnabled(false);
}
void Widget::readyRead_slot()
{
QByteArray msg = socket->readAll();
//将读取到的信息 放入ui界面上
ui->listWidget->addItem(QString::fromLocal8Bit(msg));
}
void Widget::disconnected_slot()
{
ui->msgEdit->setEnabled(false); //设置不可以状态
ui->sendButton->setEnabled(false);
ui->disConnectButton_3->setEnabled(false);
ui->usernameEdit->setEnabled(true);//设置可以状态
ui->ipEdit->setEnabled(true);
ui->portEdit_4->setEnabled(true);
ui->connectButton_2->setEnabled(true);
}
void Widget::on_sendButton_clicked()
{
QString msg = ui->msgEdit->text();
msg = userName +":" + msg;
socket->write(msg.toLocal8Bit());
// 清空
ui->msgEdit->clear();
}
void Widget::on_disConnectButton_3_clicked()
{
QString msg = userName + ": 离开聊天室";
socket->write(msg.toLocal8Bit());
//让客户端和服务器断开连接
socket->disconnectFromHost();
}
4.11作业
最新推荐文章于 2026-01-02 22:16:15 发布
本文详细描述了一个使用Qt库中的QTcpSocket类构建的聊天室客户端,包括连接服务器、发送消息、接收消息和断开连接的各个功能处理函数。
143

被折叠的 条评论
为什么被折叠?



