一、创建串口调试助手UI界面
1、首先生成串口连接必要参数界面,删除关闭串口控件

2、给参数下拉框添加常见的选项,删除关闭串口控件

3、将串口调试助手参数界面布局整齐,删除关闭串口控件

4、更改控件名字,方便后续编程,删除关闭串口控件

5、添加剩余的控件组成串口调试助手的UI界面,删除关闭串口控件

二、 编辑串口调试助手代码
1、在pro文件中加入serialport
![]()
2、编写代码
widget.c
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QtSerialPort>
#include <QSerialPortInfo>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setWindowTitle("Serial_Port");
    serial = new QSerialPort(this);
    //通过QSerialPortInfo查找可用串口,但存在一个局限,如果在软件打开后在插入串口,此时串口不可以识别到
    ui->serailCB->clear();
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        ui->serailCB->addItem(info.portName());
    }
    
    //信号与槽函数,当串口接收到数据后转到对应的接收函数
    connect(serial,SIGNAL(readyRead()),this,SLOT(serialPort_readyRead()));
}
Widget::~Widget()
{
    delete ui;
}
void Widget::on_openSerialBut_clicked()
{
    if(ui->openSerialBut->text()==QString("打开串口"))
    {
        //设置串口名
        serial->setPortName(ui->serailCB->currentText());
        //设置波特率
        serial->setBaudRate(ui->baundDrateCB->currentText().toInt());
        //设置数据位
        switch(ui->dataBitCB->currentText().toInt())
        {
            case 8:serial->setDataBits(QSerialPort::Data8);break;
        }
        //设置停止位
        switch (ui->stopBitCB->currentIndex())
        {
            case 0:serial->setStopBits(QSerialPort::OneStop);break;
            case 1:serial->setStopBits(QSerialPort::OneAndHalfStop);break;
            case 2:serial->setStopBits(QSerialPort::TwoStop);break;
        }
        //设置奇偶校验位
        switch(ui->checkBitCB->currentIndex())
        {
            case 0:serial->setParity(QSerialPort::NoParity);break;//无校验
            case 1:serial->setParity(QSerialPort::OddParity);break;//奇校验
            case 2:serial->setParity(QSerialPort::EvenParity);break;//偶校验
        }
        //设置流控制
        serial->setFlowControl(QSerialPort::NoFlowControl);
        //打开串口
        if(!serial->open(QIODevice::ReadWrite))
        {
            QMessageBox::about(NULL,"提示","无法打开串口");
            return;
        }
         ui->openSerialBut->setText(tr("关闭串口"));
    }
    else
    {
        serial->close();//关闭串口
        ui->openSerialBut->setText(tr("打开串口"));
    }
}
void Widget::serialPort_readyRead()                             //串口接收
{
    QByteArray lasttext;
    lasttext=ui->receivePlainTextEdit->toPlainText().toUtf8();
    QByteArray receiveText = serial->readAll();
    lasttext=lasttext.append(receiveText);
    ui->receivePlainTextEdit->setPlainText(lasttext);
}
void Widget::on_sendBut_clicked()
{
    QByteArray Sendtext=ui->sendTextEdit->toPlainText().toUtf8();
    serial->write(Sendtext);
}
void Widget::on_clearSendBut_clicked()
{
    ui->sendTextEdit->clear();
}
 
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtSerialPort>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private slots:
    void on_openSerialBut_clicked();        //打开串口槽函数
    void serialPort_readyRead();            //串口接收槽函数
    void on_sendBut_clicked();
    void on_clearSendBut_clicked();
private:
    Ui::Widget *ui;             //串口端口
    QSerialPort *serial;                    //串口端口
};
#endif // WIDGET_H
 
 
三、实操
本工程只是实现了最基本的串口接收和发送功能,界面和代码都需要很大的改进

四、注意事项
如果出现串口头文件找不到的情况,那么需要更新一下组件




















