在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。顺序不要错。)
另外,不知道大家如何看待本文的注释风格。如果大家喜欢的话,我今后会继续采用这样的注释风格。
|