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