代码复现|QT快速入门 (课程来自B站)--其六

自己跟着老师的课程一步步跟着写下来的,有需要的可以自取,有用的话还希望点一个小小的赞同哦~

视频连接专栏的前几篇文章有,此处就不再冗余的放了(其实就是懒得粘贴链接了~~~)

六、TCP 客户端(包括启动新窗口一节内容)

chat.h

#ifndef CHAT_H
#define CHAT_H

#include <QWidget>
#include <QTcpSocket>

namespace Ui {
class Chat;
}

class Chat : public QWidget
{
    Q_OBJECT

public:
    explicit Chat(QTcpSocket *s, QWidget *parent = nullptr);
    //函数括号中只能更改前面,因为默认参数只能放在后面。
    ~Chat();

private slots:
    void on_clearBt_clicked();

    void on_sendBt_clicked();

private:
    Ui::Chat *ui;
    QTcpSocket *socket;
};

#endif // CHAT_H
Widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpSocket>
#include <QHostAddress>
#include <chat.h>

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_cancelBt_clicked();

    void on_connectBt_clicked();

private:
    Ui::Widget *ui;
    QTcpSocket *socket;  //指针,需要在cpp文件的构造函数中初始化
};
#endif // WIDGET_H

chat.cpp

#include "chat.h"
#include "ui_chat.h"

Chat::Chat(QTcpSocket *s, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Chat)
{
    ui->setupUi(this);
    socket = s;
}

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

void Chat::on_clearBt_clicked()
{
    ui->lineEdit->clear();
}

void Chat::on_sendBt_clicked()
{
    QByteArray ba;
    ba.append(ui->lineEdit->text());  //将QString 转换成 QByteArray
    socket->write(ba);
}

widget.cpp 

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>

#include <QDebug>  //调试程序时使用
/* 搭建一个TCP客户端 */
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    socket = new QTcpSocket;  //创建socket对象
}

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


void Widget::on_cancelBt_clicked()
{
    this->close();
}

void Widget::on_connectBt_clicked()
{
    //获取IP地址和端口号
    QString IP = ui->ipLineEdit->text();
    QString port = ui->portLineEdit->text();

    qDebug() << IP ;
    qDebug() << port;  // 测试程序时使用

    //连接服务器
    socket->connectToHost(QHostAddress(IP),port.toShort());  //toSort 转换成短整型

    //连接服务器成功,socket对象会发出信号
    connect(socket,&QTcpSocket::connected,[this]()
    {
        QMessageBox::information(this,"连接提示","连接服务器成功");

        this->hide();  //隐藏此界面,展示新的界面
//        Chat c;  //c是局部变量,函数运行结束后,局部变量释放(没了),所以不能在栈上面创建对象,要在堆上面创建对象
        Chat *c = new Chat(socket);  //堆空间创建对象
        c->show();
    });

    //连接断开,socket也会发出信号
    connect(socket,&QTcpSocket::disconnected,[this]()
    {
        QMessageBox::warning(this,"连接提示","连接异常,网络断开");
    });
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值