#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->disconnectbn->setEnabled(false);
//如果客户端成功连接服务器,那么客户端就会自动发射一个connected()信号
//我们就可以将该信号连接到自定义的槽函数处理逻辑代码,由于只需要连接一次,所以将该函数写在构造函数中
connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);
//如果服务器向客户端发来数据,那么客户端就会自动发送一个readyRead()信号
//我们就可以将该信号连接到自定义的槽函数中,读取服务器发来的数据,由于只需要连接一次,所以该函数写在构造函数中
connect(socket,&QTcpSocket::readyRead,this,&Widget::readyread_slot);
//如果成功与服务器断开连接,那么客户端就会自动发送disconnected()函数
//我们就可以将该信号连接到自定义的槽函数中,处理逻辑代码,由于只需要连接一次,所以该函数写在构造函数中
connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_connectbn_clicked()
{
//获取ui界面上的ip和端口号
QString ip=ui->ipedit->text();
quint16 port = ui->portedit->text().toUInt();
//连接服务器按钮对应的槽函数
// virtual void connectToHost(const QString &hostName, quint16 port, OpenMode mode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);
//参数1:连接服务器的IP地址
//参数2:连接服务器的端口号
socket->connectToHost(ip,port);
}
void Widget::connected_slot()
{
username = ui->usredit->text();
QString msg = username + ": 进入聊天室";
//ui->listWidget->addItem()
//将信息发送给服务器
socket->write(msg.toLocal8Bit());
ui->msgedit->setEnabled(true);
ui->sendbtn->setEnabled(true);
ui->disconnectbn->setEnabled(true);
ui->usredit->setEnabled(false);
ui->ipedit->setEnabled(false);
ui->portedit->setEnabled(false);
ui->connectbn->setEnabled(false);
}
void Widget::on_sendbtn_clicked()
{
//发送按钮对应的槽函数
//获取ui界面上的文本
QString msg = username+":"+ui->msgedit->text();
// 创建新的 QListWidgetItem 对象,用于显示发送的消息
QListWidgetItem *item = new QListWidgetItem(msg);
//
912作业
最新推荐文章于 2024-10-04 17:07:53 发布