0
点赞
收藏
分享

微信扫一扫

QT--收发数据代码

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

(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 条评论