QT制作串口调试助手源码

该博客介绍了一种使用Qt进行串口配置的方法,通过遍历可用串口并使用QSerialPortInfo类来添加到组合框中。当用户选择串口参数如波特率、数据位、停止位和校验位后,可以实现串口的打开、关闭、发送数据及接收数据的功能。代码示例展示了如何使用Qt信号槽机制响应串口的读取事件。
摘要由CSDN通过智能技术生成

在这里插入图片描述

点击获取源码

Qt界面布局

在这里插入图片描述

应用代码

  • 针对串口的配置,这里直接使用if条件去判断,并且配置并未写全,有需要可自己填充

  • 关键字foreach。这里用来获取串口名称

    #define foreach Q_FOREACH
    #define Q_FOREACH(variable, container)                                \
    for (auto _container_ = QtPrivate::qMakeForeachContainer(container); \
         _container_.control && _container_.i != _container_.e;         \
         ++_container_.i, _container_.control ^= 1)                     \
        for (variable = *_container_.i; _container_.control; _container_.control = 0)
    

    由以上代码可知,关键字foreach,用于方便地访问容器里所有数据项。
    variable是容器container中的一个子项
    例如:

    QStringList slt = {"abc", "def", "123"};
    foreach(QString s , slt )
    {
        cout<<s<<endl;
    }
    // 输出结果为:
    abc
    def 
    123
    
  • app代码

    #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 serial_name_port;
    
        serial_port_ = new QSerialPort(this);
    
        connect(serial_port_, SIGNAL(readyRead()), this, SLOT(SerialPortReadyReadSlot()));
    
        foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
            serial_name_port << info.portName();
        }
    
        ui->SerialComboBox->addItems(serial_name_port);
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    
    void Widget::on_OpenButton_clicked()
    {
        QSerialPort::BaudRate baud_rate = QSerialPort::Baud115200;;
        QSerialPort::DataBits data_bits = QSerialPort::Data8;
        QSerialPort::StopBits stop_bits = QSerialPort::OneStop;
        QSerialPort::Parity check_bits = QSerialPort::NoParity;
    
        if(ui->BaudRateComboBox->currentText() == "115200") {
            baud_rate = QSerialPort::Baud115200;
        } else if(ui->BaudRateComboBox->currentText() == "9600") {
            baud_rate = QSerialPort::Baud9600;
        } else if(ui->BaudRateComboBox->currentText() == "4800") {
            baud_rate = QSerialPort::Baud4800;
        }
    
        if(ui->DataBitsComboBox->currentText() == "5") {
            data_bits = QSerialPort::Data5;
        } else if(ui->DataBitsComboBox->currentText() == "6") {
            data_bits = QSerialPort::Data6;
        } else if(ui->DataBitsComboBox->currentText() == "7") {
            data_bits = QSerialPort::Data7;
        } else if(ui->DataBitsComboBox->currentText() == "8") {
            data_bits = QSerialPort::Data8;
        }
    
        if(ui->StopBitsComboBox->currentText() == "1") {
            stop_bits = QSerialPort::OneStop;
        } else if(ui->StopBitsComboBox->currentText() == "1.5") {
            stop_bits = QSerialPort::OneAndHalfStop;
        } else if(ui->StopBitsComboBox->currentText() == "2") {
            stop_bits = QSerialPort::TwoStop;
        }
    
        if(ui->CheckBitsComboBox->currentText() == "none") {
            check_bits = QSerialPort::NoParity;
        }
    
        serial_port_->setPortName(ui->SerialComboBox->currentText());
        serial_port_->setBaudRate(baud_rate);
        serial_port_->setDataBits(data_bits);
        serial_port_->setStopBits(stop_bits);
        serial_port_->setParity(check_bits);
    
        if(serial_port_->open(QIODevice::ReadWrite) == true) {
            QMessageBox::information(this, "提示", "成功");
        } else {
            QMessageBox::critical(this, "提示", "失败");
        }
    
    }
    
    void Widget::on_CloseButton_clicked()
    {
        serial_port_->close();
    }
    
    void Widget::on_SendButton_clicked()
    {
        serial_port_->write(ui->SendEdit->text().toLocal8Bit().data());
    }
    
    void Widget::on_ClearButton_clicked()
    {
        ui->RecvEdit->clear();
    }
    
    void Widget::SerialPortReadyReadSlot()
    {
        QString buf;
        buf = QString(serial_port_->readAll());
        ui->RecvEdit->appendPlainText(buf);
    }
    
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
串口调试助手是一种用于进行串口通信测试和调试的工具。基于Qt编写的串口调试助手源码是一份使用Qt库进行开发的源代码,用于构建该工具的界面和实现各种串口通信功能。 Qt是一种流行的跨平台应用程序开发框架,具有丰富的界面控件和功能库,方便开发者快速构建可视化应用程序。 串口调试助手通常具有以下功能: 1. 检测可用串口:通过Qt串口通信类,源码会扫描系统中所有可用的串口并显示在界面上供用户选择。 2. 设置串口参数:用户可以通过界面设置串口的波特率、数据位、校验位、停止位等参数,以确保与目标设备通信时设置一致。 3. 串口数据收发:用户可以在界面中输入要发送的数据并通过点击发送按钮将其发送给目标设备。同时,源码还负责接收目标设备发送的数据并在界面中显示。 4. 数据解析与显示:源码会实现数据的解析和显示功能,根据用户设定的解析规则将接收到的数据进行解析,并以可读的形式展示在界面上,帮助用户进行调试和分析。 5. 日志记录与保存:源码会支持数据的日志记录和保存功能,用户可以选择保存收发的数据记录,以方便后续分析。 6. 界面友好:通过Qt的界面设计工具和丰富的界面控件,源码会提供一个直观、易用的用户界面,方便用户进行操作和交互。 基于Qt编写的串口调试助手源码可以帮助开发者快速搭建串口通信测试环境,并提供丰富的功能以满足开发和调试需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点灯师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值