0
点赞
收藏
分享

微信扫一扫

QT--收发数据代码

点亮自己的那盏灯 2022-01-09 阅读 50

(1).pro

QT       += core gui
QT += serialport
QT += widgets
QT += core

(2).h

#ifndef JTLTESTTOOL_H
#define JTLTESTTOOL_H

#include <QDialog>

/*-----------------------------user-------------------------------------*/
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>
#include <QPushButton>
#include <QMessageBox>
#include <QString>
#include <QByteArray>
#include <QDateTime>
#include <typeinfo>


QT_BEGIN_NAMESPACE
namespace Ui { class JTLTestTool; }
QT_END_NAMESPACE

class JTLTestTool : public QDialog
{
Q_OBJECT

public:
JTLTestTool(QWidget *parent = nullptr);
~JTLTestTool();

private:
Ui::JTLTestTool *ui;
/*------------------------------------------------------------------*/
//**模块名称:自定义函数类
//**功能:
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
//初始化,自动获取当前可用串口
void system_init();
//打开串口
void btn_open_clicked ();
//关闭串口
void btn_close_clicked ();
//发送数据
void btn_send_clicked ();
//接收数据
void recive_data ();
//清除接收区
void clear_recive_data ();
//刷新串口
void refresh_clicked ();

/*------------------------------------------------------------------*/
//**模块名称:
//**功能:
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/

QSerialPort myserialport;

};
#endif // JTLTESTTOOL_H

().cpp

#include "jtltesttool.h"
#include "ui_jtltesttool.h"


JTLTestTool::JTLTestTool(QWidget *parent)
: QDialog(parent)
, ui(new Ui::JTLTestTool)
{
ui->setupUi(this);


/*---------------------------user----------------------------------------*/
system_init();
//刷新串口
connect(ui->btn_refresh,&QPushButton::clicked,this,&JTLTestTool::refresh_clicked);
//打开串口
connect(ui->btn_open,&QPushButton::clicked,this,&JTLTestTool::btn_open_clicked);
//关闭串口
connect(ui->btn_close,&QPushButton::clicked,this,&JTLTestTool::btn_close_clicked);
//发送数据
connect(ui->btn_send,&QPushButton::clicked,this,&JTLTestTool::btn_send_clicked);
//接收数据
connect(&myserialport,&QSerialPort::readyRead,this,&JTLTestTool::recive_data);
//清除接收区数据
connect(ui->btn_clearrecive,&QPushButton::clicked,this,&JTLTestTool::clear_recive_data);
}

JTLTestTool::~JTLTestTool()
{
delete ui;

}
/*------------------------------------------------------------------*/
//**函数名:system_init()
//**功能:初始化串口信息,获取可用串口并显示
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::system_init()
{
//“关闭”按钮失能
ui->btn_close->setEnabled(false);
//获取可用串口
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
ui->comboBox_serailport->addItem(serial.portName());
serial.close();
}
}

/*------------------------------------------------------------------*/
//**函数名:btn_open_clicked()
//**功能:打开串口,并配置串口信息
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::btn_open_clicked ()
{
//关闭按钮使能
ui->btn_close->setEnabled(true);
//打开按钮失能
ui->btn_open->setEnabled(false);
//设置串口号
myserialport.setPortName(ui->comboBox_serailport->currentText());
//以读写模式打开
if(myserialport.open(QIODevice::ReadWrite))
{
//配置串口信息
myserialport.setBaudRate(QSerialPort::Baud9600);
myserialport.setParity(QSerialPort::NoParity);
myserialport.setDataBits(QSerialPort::Data8);
myserialport.setStopBits(QSerialPort::OneStop);
myserialport.setFlowControl(QSerialPort::NoFlowControl);
qDebug()<<"串口打开";
}
else
{
QMessageBox msgBox;
msgBox.setText("串口打开失败!");
msgBox.exec();
}

}
/*------------------------------------------------------------------*/
//**函数名:btn_close_clicked ()
//**功能:关闭串口
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::btn_close_clicked ()
{
//关闭按钮失能
ui->btn_close->setEnabled(false);
//打开按钮使能
ui->btn_open->setEnabled(true);
//关闭串口
myserialport.close();
qDebug()<<"串口关闭";
}
/*------------------------------------------------------------------*/
//**函数名:btn_send_clicked ()
//**功能:发送数据
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::btn_send_clicked ()
{
// recive_data();
//获取要发送的数据
QByteArray senddata = ui->lineEdit_send->text().toUtf8();
//发送数据
myserialport.write(senddata);
qDebug() << senddata;

}
/*------------------------------------------------------------------*/
//**函数名: recive_data ();
//**功能:接收并显示数据
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::recive_data ()
{
qDebug() << "开始接收";
//接收数据
QByteArray recivedata = myserialport.readAll();
//获取系统时间
QString datatime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
//显示接收到的数据,并显示接收时间
ui -> plainTextEdit_recive ->appendPlainText(datatime+"接收:"+recivedata);
//QString type1 = typeid (recivedata).name();
// qDebug() << type1;
}
/*------------------------------------------------------------------*/
//**函数名: clear_recive_data();
//**功能:接收并显示数据
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::clear_recive_data ()
{
ui->plainTextEdit_recive->clear();
}

/*------------------------------------------------------------------*/
//**函数名:refresh_clicked ()
//**功能:刷新串口,显示可用串口
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::refresh_clicked ()
{
//清除串口显示
ui->comboBox_serailport->clear();
//获取可用串口
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
QString portname = ui->comboBox_serailport->currentText();
//判断可用串口是否已显示
if(portname != serial.portName())
{
ui->comboBox_serailport->addItem(serial.portName());
serial.close();
}

}
}

(4)main.cpp

#include "jtltesttool.h"

#include <QApplication>

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

相关推荐

0 条评论