QT实现串口助手

功能描述

  1. 实现窗口数据的接收与发送
  2. 设置串口通信相关参数

二 、串口调试助手代码实现

widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QSerialPort>
#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
    
     class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    
    
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    QSerialPort *serialport;

private slots:
    void on_openOrCloseBtn_clicked();
    void serialport_readyRead_slot();
    void on_clearBtn_clicked();
    void on_sendBtn_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QSerialPortInfo>
#include <QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    
    
    ui->setupUi(this);
    QStringList serialNames;
    //创建串口对象
    serialport = new QSerialPort(this);
    //关联串口接收数据槽函数
    connect(serialport,SIGNAL(readyRead()),this,SLOT(serialport_readyRead_slot()));

    //获取可用的串口列表
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
    {
    
    
        serialNames<<info.portName();
    }
    ui->serialCb->addItems(serialNames);
}

Widget::~Widget()
{
    
    
    delete ui;
}
//接收数据槽函数
void Widget::serialport_readyRead_slot()
{
    
    
    //将接收的数据强制转换成QString类型
    QString buf = QString(serialport->readAll());
    ui->textBrowser->append(buf);
}


void Widget::on_openOrCloseBtn_clicked()
{
    
    



    if(ui->openOrCloseBtn->text() == "打开")            //打开串口
    {
    
    
        //设置端口
        serialport->setPortName(ui->serialCb->currentText());

        //设置波特率
        if(ui->baudCb->currentText() == "4800")
        {
    
    
            qDebug("波特率:4800");
            serialport->setBaudRate(QSerialPort::Baud4800);

        }else if(ui->baudCb->currentText() == "9600")
        {
    
    
            qDebug("波特率:9600");

            serialport->setBaudRate(QSerialPort::Baud9600);
        }else if(ui->baudCb->currentText() == "115200")
        {
    
    
            qDebug("波特率:115200");
            serialport->setBaudRate(QSerialPort::Baud115200);
        }

        //设置数据位
        if(ui->dataCb->currentText()=="5")
        {
    
    
            qDebug("数据位:5");
            serialport->setDataBits(QSerialPort::Data5);
        }else if(ui->dataCb->currentText()=="6")
        {
    
    
            qDebug("数据位:6");
            serialport->setDataBits(QSerialPort::Data6);
        }else if(ui->dataCb->currentText()=="7")
        {
    
    
            qDebug("数据位:7");
            serialport->setDataBits(QSerialPort::Data7);
        }else if(ui->dataCb->currentText()=="8")
        {
    
    
            qDebug("数据位:8");
            serialport->setDataBits(QSerialPort::Data8);
        }

         //设置停止位
        if(ui->stopCb->currentText()=="1")
        {
    
    
            qDebug("停止位:1");
            serialport->setStopBits(QSerialPort::OneStop);
        }else if(ui->stopCb->currentText()=="1.5")
        {
    
    
            qDebug("停止位:1.5");
           serialport->setStopBits(QSerialPort::OneAndHalfStop);
        }else if(ui->stopCb->currentText()=="2")
        {
    
    
            qDebug("停止位:2");
            serialport->setStopBits(QSerialPort::TwoStop);
        }

        //设置校验位
        if(ui->parityCb->currentText()=="none")
        {
    
    
            qDebug("检验位:none");
            serialport->setParity(QSerialPort::NoParity);
        }

        if(serialport->open( QIODevice::ReadWrite)==true)
        {
    
    
            ui->openOrCloseBtn->setText("关闭");
            QMessageBox::information(this,"提示",ui->serialCb->currentText()+"打开成功");
        }else{
    
    
            QMessageBox::critical(this,"提示","失败");
        }
    }else if(ui->openOrCloseBtn->text() == "关闭"){
    
           //关闭串口

        serialport->close();
        QMessageBox::information(this,"提示",ui->serialCb->currentText()+"关闭成功");
        ui->openOrCloseBtn->setText("打开");
    }
}

void Widget::on_clearBtn_clicked()
{
    
    
    //清空显示框
     ui->textBrowser->clear();
}

void Widget::on_sendBtn_clicked()
{
    
    
    //将数据发送出去
    serialport->write(ui->lineEdit->text().toLocal8Bit().data());
}

二、效果展示

在这里插入图片描述
源码下载

猜你喜欢

转载自blog.csdn.net/qq_37120496/article/details/115353798