【QT】【TCP网络编程入门教学】【点击程序A、程序B响应】

在QT新建widget项目,不勾选ui。然后在pro文件开头添加一行代码:

QT       += network

然后在widget.h中复制粘贴以下代码:

//这个文件中的内容不需要理解。
//这些内容是硬性规定,直接复制粘贴就可以。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>       
#include <QHBoxLayout>   
#include <QPushButton>    
#include <QTcpSocket>     

class Widget : public QWidget{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
private slots:
    void F1();
private:
    QTcpSocket  *R;
    QPushButton *A;
};

#endif

然后在widget.cpp中复制粘贴以下代码:

#include "widget.h"

Widget::Widget(QWidget *parent):QWidget(parent){
    //在虚空中创建一个发送按钮。
    //如果点击发送按钮,那么执行F1。F1的定义在后文。
    //注:只能先在虚空中创建按钮,后文再把按钮从虚空中移动到界面中。
    A = new QPushButton("发送");
    connect(A, &QPushButton::clicked, this, &Widget::F1);

    //连接第二个程序。
    //在后文中,第二个程序的识别号会被设置为4444。因此此处连接4444号程序。
    R = new QTcpSocket();
    R->connectToHost("127.0.0.1", 4444);

    //把按钮从虚空中移动到界面中。
    QHBoxLayout *X = new QHBoxLayout(this);
    X->addWidget(A);
    setLayout(X);
}

//如果点击发送按钮,那么执行F1。
//F1:发送数据“XXX”。
void Widget::F1(){
    QString X="XXX";
    R->write(X.toLatin1());
    R->flush();
}

然后在main.cpp中复制粘贴以下代码:

//这个文件中的内容不需要理解。直接复制粘贴即可。
//对于所有项目,这个文件中的内容都一样,不需要修改。

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

这样,程序A就做好了。接下来做程序B。

在QT新建widget项目,不勾选ui。然后在pro文件开头添加一行代码:

QT       += network

然后在widget.h中复制粘贴以下代码:

//本文件不需要理解。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QTextEdit>
#include <QHBoxLayout>

class Widget : public QWidget{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
private slots:
    void F1();
    void F2();
private:
    QTcpSocket* R;
    QTcpServer* S;
    QTextEdit * A;
};

#endif

然后在widget.cpp中复制粘贴以下代码:

#include "widget.h"

Widget::Widget(QWidget *parent):QWidget(parent){
    //第一个程序会连接识别号为4444的程序。
    //此处将本程序的识别号设置为4444,从而使得第一个程序能够连接本程序。
    //如果有程序连接本程序,那么执行F1。
    S = new QTcpServer();
    S->listen(QHostAddress::Any, 4444);
    connect(S,&QTcpServer::newConnection,this,&Widget::F1);

    //创建一个文本框,并把它放入界面。
    //未来,如果点击第一个程序上的按钮,那么这个文本框上就会显示“XXX”。
    A = new QTextEdit();
    QHBoxLayout *X = new QHBoxLayout(this);
    X->addWidget(A);
    setLayout(X);
}

//如果有程序连接本程序,那么执行F1。
//F1:如果这个程序给本程序发了消息,那么执行F2。
void Widget::F1(){
    R = S->nextPendingConnection();
    QObject::connect(R, &QTcpSocket::readyRead, this, &Widget::F2);
}

//F2:把收到的消息显示在文本框中。
void Widget::F2(){
    QByteArray X = R->readAll();
    A->setText(X);
}

然后在main.cpp中复制粘贴以下代码:

//本文件不需要理解。

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

这样,程序B就做好了。

先运行程序B,再运行程序A,然后点击A上的按钮,你就会看到B的文本框中出现“XXX”。这就实现了一个简单的通讯。

(注:必须先运行B、再运行A。顺序不要错。)

另外,不知道大家如何看待本文的注释风格。如果大家喜欢的话,我今后会继续采用这样的注释风格。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值