QT串口助手编写

这个博客详细介绍了如何使用Qt创建一个串口助手应用,包括设置串口参数、打开和关闭串口、读取和发送数据。通过搜索可用串口、设置波特率、数据位、停止位和校验位,实现与串口设备的信息交互。当串口有数据接收时,会自动更新显示在接收编辑框中。
摘要由CSDN通过智能技术生成

ui界面:
在这里插入图片描述

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSerialPort>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_openBt_clicked();

    void on_closeBt_clicked();

    void serialPortReadyRead_Slot();

    void on_sendBt_clicked();

    void on_clearBt_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QSerialPortInfo>
#include <QMessageBox>
#include <QString>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QStringList serialNamePort;
    serialPort = new QSerialPort(this);//新建串口
    connect(serialPort,SIGNAL(),this,SLOT(serialPortReadyRead_Slot()));//链接串口发生信号时,触发槽函数,在槽函数中进行串口信息读取并显示在接受框

    foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts()){
        serialNamePort<<info.portName();
    }
    ui->serialCb->addItems(serialNamePort);//搜索可用串口并添加到serialCb可选框内
}

Widget::~Widget()
{
    delete ui;
}

void Widget::serialPortReadyRead_Slot()
{
    QString buf;
    buf = QString(serialPort->readAll());
    ui->recvEdit->appendPlainText(buf);
}

void Widget::on_openBt_clicked()//该函数进行打开串口操作,在此完成数据位,波特率等串口信息的设置
{
    QSerialPort::BaudRate baudRate;
    QSerialPort::DataBits dateBits;
    QSerialPort::StopBits stopBits;
    QSerialPort::Parity checkBits;

    if(ui->boundrateCb->currentText() == "4800"){
        baudRate = QSerialPort::Baud4800;
    }else if(ui->boundrateCb->currentText() == "9600"){
        baudRate = QSerialPort::Baud4800;
    }else if(ui->boundrateCb->currentText() == "115200"){
        baudRate = QSerialPort::Baud115200;
    }

    if(ui->dateCb->currentText() == "5"){
        dateBits = QSerialPort::Data5;
    }else if(ui->dateCb->currentText() == "6"){
        dateBits = QSerialPort::Data6;
    }else if(ui->dateCb->currentText() == "7"){
        dateBits = QSerialPort::Data7;
    }else if(ui->dateCb->currentText() == "8"){
        dateBits = QSerialPort::Data8;
    }

    if(ui->stopCb->currentText() == "1"){
        stopBits = QSerialPort::OneStop;
    }else if(ui->stopCb->currentText() == "1.5"){
        stopBits = QSerialPort::OneAndHalfStop;
    }else if(ui->stopCb->currentText() == "2"){
        stopBits = QSerialPort::TwoStop;
    }

    if(ui->checkCb->currentText() == "none"){
        checkBits = QSerialPort::NoParity;
    }

    serialPort->setPortName(ui->serialCb->currentText());
    serialPort->setBaudRate(baudRate);
    serialPort->setDataBits(dateBits);
    serialPort->setStopBits(stopBits);
    serialPort->setParity(checkBits);

    if(serialPort->open(QIODevice::ReadWrite) == true){
        QMessageBox::information(this,"提示","成功");
    }
    else {
        QMessageBox::critical(this,"提示","失败");
    }
}

void Widget::on_closeBt_clicked()
{
    serialPort->close();
}

void Widget::on_sendBt_clicked()
{
    serialPort->write(ui->sendEdit->text().toLocal8Bit().data());
}

void Widget::on_clearBt_clicked()
{
    ui->recvEdit->clear();
}

补充:串口助手选择好串口并打开后,就和该串口上的信息进行交互,在该串口上读取信息和 往该串口上发送信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
与硬件通信的程序基本上要用到串口,虽然qt5以后集成了串口通信类,但是个人觉得那个串口通信类有点问题,在linux上表现很好,windows上大数据会有怪怪的问题出现,而且只能在qt5以上的版本才能用,无奈大部分的嵌入式linux上还停留在4.7.1到4.8.5左右的版本,所以本人一直喜欢用第三方的串口通信类做处理。 程序调试中经常需要串口调试,甚至还需要模拟设备数据回复,甚至串口转网络出去,特意将这些常用功能都做到一个串口调试助手中去。 基本功能: 1:支持16进制数据发送与接收。 2:支持windows下COM9以上的串口通信。 3:实时显示收发数据字节大小以及串口状态。 4:支持任意qt版本,亲测4.7.0 4.8.5 4.8.7 5.4.1 5.7.0 5.8.0。 5:支持串口转网络数据收发。 高级功能: 1:可自由管理需要发送的数据,每次只要从下拉框中选择数据即可,无需重新输入数据。 2:可模拟设备回复数据,需要在主界面开启模拟设备回复数据。当接收到设置好的指令时,立即回复设置的回复指令。例如指定收到0x16 0x00 0xFF 0x01需要回复0x16 0x00 0xFE 0x01,则只需要在SendData.txt中添加一条数据16 00 FF 01:16 00 FE 01即可。 3:可定时发送数据和保存数据到文本文件:,默认间隔5秒钟,可更改间隔时间。 4:在不断接收到大量数据时,可以暂停显示数据来查看具体数据,后台依然接收数据但不处理,无需关闭串口来查看已接收到的数据。 5:每次收到的数据都是完整的一条数据,而不是脱节的,做了延时处理。 6:一套源码随处编译,无需更改串口通信类,已在XP/WIN7/UBUNTU/ARMLINUX系统下成功编译并运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值