!
分别命名为
pushButton_connect
pushButton_disconnect
pushButton_send
操作如下 然后同样右键
选择改变文本
分别命名为
发送
连接
断开
命名为
messagetextBrowser
命名为
messagelineEdit
槽函数
是QT的上位机设计的灵魂,简单的,你们可以类比理解为中断
的响应函数,而触发事件可以是各式各样的,比如说点击,选择,等等用户操作.
右键
->转到槽
选择clicked()
->OK
然后就会跳转到响应函数 相当于用户点击之后就会触发这个函数,然后我们添加代码
QString str=this->ui->messagelineEdit->text();
QByteArray arr;
QDataStream dst(&arr,QIODevice::ReadWrite);/*QDataStream 是继承于 QIODevice 的所以 必须要 设置读写权限*/
dst<<QString("信息:")<<str;/*这里一定要设置好数据类型*/
this->socket->write(arr);
这样我们的一个槽函数就设置好了,接下来 同样的操作再来两次,添加其他两个按钮的槽函数 添加代码
this->socket->connectToHost("127.0.0.1",2333,QTcpSocket::ReadWrite);
connect(this->socket,SIGNAL(connected()),this,SLOT(connected()));
this->socket->close();
添加完后让我们来看看,在mainwindow.h
这个文件里面是不是自动生成添加了这些槽函数 所以说,这就是QT的一大优势,他的界面编辑会修改他的头文件里的函数声明 注意
:这种改变是单向的,所以有可能你有时候界面与头文件不对应
,所以最好时刻注意,按按左下角的小锤子
在.pro
的文件中添加
QT += network
在mainwindow.h
中添加下列头文件
#include <QtNetwork/QTcpSocket>
#include <QString>
#include <QDataStream>
#include <QByteArray>
#include<QtNetwork/QHostAddress>
#include<QMessageBox>
QTcpSocket * socket;
一般来说,这种实例声明代码我们会把他放到private私有类
当中
this->socket = new QTcpSocket(this);
这种带this
一般都是在构造函数里面添加↓ 也就是这里
我们在自己制作上位机时,其实往往不需要自己写以上我给的槽函数代码,那些就相当于STM32
的库函数,你要做的是理解
,而不是会写
,没人会把32的库函数配置背下来,QT库也是同样的道理.为了采集信息,你要做的是正确的跑通你要用的库,而其他的函数用来处理信息的往往才是你要真正自己写的东西
mainwindow.h
中添加两个函数void connected(); //已经连接
void readyread(); //准备读取
mainwindow.cpp
里面添加void MainWindow::connected()
{
QMessageBox::about(this,"提示","连接成功");
connect(this->socket,SIGNAL(readyRead()),this,SLOT(readyread())
);
}
void MainWindow::readyread()
{
QMessageBox::about(this,"提示","准备读取");
QByteArray arr=this->socket->readAll();
QDataStream * dst=new
QDataStream(&arr,QIODevice::ReadOnly);/******重点******/
QString str1;
QString str2;
(*dst)>>str1>>str2;
this->ui-> messagetextBrowser->append(str1+str2);
QMessageBox::about(this,"x",str1+str2);
}
然后就可以点击小锤子
->运行
了,出现以下界面就大功告成!
sMessagetextBrowser
pushButton_discon
pushButton_send
sMessagelineEdit
相信你们已经可以根据这张图做出跟我一模一样的界面了~
在.pro
的文件中添加
QT += network
在mainwindow.h
中添加下列头文件
#include<QtNetwork/QTcpServer>
#include<QtNetwork/QTcpSocket>
#include <QMessageBox>
QTcpServer * server;
QTcpSocket * socket;
一般来说,这种实例声明代码我们会把他放到private私有类
当中 而对应的,在构造函数里面添加
this->socket=0;
this->server=new QTcpServer(this);
this->server->listen(QHostAddress::Any,2333);
QObject::connect(this->server,SIGNAL(newConnection()),this,SLOT(newConnection()));
按照和client按钮一模一样的做法 添加"发送"和"断开"按钮的槽函数
void MainWindow::on_pushButton_discon_clicked()
{
this->socket->close();
}
void MainWindow::on_pushButton_send_clicked()
{
QString str=this->ui-> sMessagelineEdit->text();
QByteArray arr;
QDataStream dst(&arr,QIODevice::ReadWrite);/*QDataStream 是继承于QIODevice 的所以 必须要 设置读写权限*/
dst<<QString("信息:")<<str;/*这里一定要设置好数据类型*/
this->socket->write(arr);
}
mainwindow.h
中添加两个函数void newConnection();
void ReceiveData();
mainwindow.cpp
里面添加void MainWindow::newConnection()
{
this->socket=this->server->nextPendingConnection();
QMessageBox::about(this,"提示","有新的连接!");
connect(this->socket,SIGNAL(readyRead()),this,SLOT(ReceiveData()));
}
void MainWindow::ReceiveData()
{
QByteArray arr=this->socket->readAll();
QDataStream dst(arr);
QString str1;
QString str2;
dst>>str1>>str2;
this->ui-> sMessagetextBrowser ->append(str1+str2);
}
然后就可以点击小锤子
->运行
了,出现以下界面就大功告成!
打开两个项目 分别编译运行 Bravo~!!
mainwindow.h
–项目的头文件,主要声明项目用到的类,如MainWindow QTclient.pro
–项目的配置信息,如用到的库,编译语法,文件,路径等等 main.cpp
–一般不修改,默认作用就是实例化窗口,后续做数据库以及界面优化时会介绍 mainwindow.cpp
–项目的主要代码存放地,其中默认实现了类的构造函数和析构函数,以及作用域 mainwindow.ui
–项目的界面
头文件介绍 类介绍 函数介绍 剩下的写到代码注释里面了,做图片好麻烦= =
与client没差,相信各位可以类比互通~
串口…写了半天全删了,我觉得还是再开一个专题讲个TCP与串口联合项目好了,到时候一起讲,培养大家多项目整合能力,有兴趣的同学可以提前做做看~