912作业

#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);

    //

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值