Qt串口编写附带源码

本文介绍了如何在QT中利用QSerialPort类进行串口操作,包括设置波特率、选择串口号,以及创建UI并实现串口打开、关闭、读写功能的详细步骤。
摘要由CSDN通过智能技术生成

一、环境

链接:https://pan.baidu.com/s/1A7ZPVsObpXUUGuIOx3ynOQ?pwd=fi21 
提取码:fi21

串口助手与虚拟串口驱动,其中驱动安装的时候记得解压后Cracked文件夹中的两个文件替换到虚拟串口驱动安装文件中,破解版

二、QT所用类

pro文件需要添加串口模块serialport才能够使用串口类,如图:

串口类:QSerialPort Class、QSerialPortInfo Class

可查阅qt帮助文件自行查阅

三、实例操作

1、UI

2、头文件

#ifndef SERIALPORT_H
#define SERIALPORT_H

#include <QWidget>
#include <QSerialPort>


namespace Ui {
class SerialPort;
}

class SerialPort : public QWidget
{
    Q_OBJECT

public:
    explicit SerialPort(QWidget *parent = nullptr);
    ~SerialPort();

private slots:
    void on_pushButton_Refresh_clicked();

    void on_pushButton_openserialport_clicked();

    void on_pushButton_closeserialport_clicked();

    void on_pushButton_clear_clicked();

    void on_pushButton_send_clicked();

private:
    Ui::SerialPort *ui;

    QSerialPort m_serial;
};

#endif // SERIALPORT_H

3、cpp文件

#include "serialport.h"
#include "ui_serialport.h"

#include <QSerialPortInfo>

SerialPort::SerialPort(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SerialPort)
{
    ui->setupUi(this);
    ui->label_serialportmsg->clear();//清空提示信息
    on_pushButton_Refresh_clicked();//刷新
}

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

//刷新串口
void SerialPort::on_pushButton_Refresh_clicked()
{
    //清空串口名
    ui->comboBox_serialportname->clear();
    //遍历串口信息
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        ui->comboBox_serialportname->addItem(info.portName());
        int baud = m_serial.baudRate();
        ui->comboBox_baudrate->addItem(QString("%1").arg(baud));
    }
}

//打开窗口
void SerialPort::on_pushButton_openserialport_clicked()
{
    m_serial.setPortName(ui->comboBox_serialportname->currentText());
    m_serial.setBaudRate(ui->comboBox_baudrate->currentText().toInt());

    m_serial.open(QIODevice::ReadWrite);

    if(m_serial.isOpen())
    {
        ui->label_serialportmsg->setText("串口打开成功");
        connect(&m_serial, &QSerialPort::readyRead, this, [=]()
        {
            QByteArray array = m_serial.readAll();
            ui->textEdit_receiv->insertPlainText(array);
        });
    }
    else
    {
        ui->label_serialportmsg->setText("串口打开失败!!");
    }
}

//关闭串口
void SerialPort::on_pushButton_closeserialport_clicked()
{
    m_serial.close();
    if(m_serial.isOpen())
    {
        ui->label_serialportmsg->setText("串口关闭失败!!");
    }
    else
    {
        ui->label_serialportmsg->setText("串口关闭成功");
    }
}

//清空信息
void SerialPort::on_pushButton_clear_clicked()
{
    ui->textEdit_receiv->clear();
}

//发送信息
void SerialPort::on_pushButton_send_clicked()
{
    QByteArray array = ui->textEdit_send->toPlainText().toUtf8();
    m_serial.write(array);
}

4、思路分析

串口类的使用和网络类的使用差不多,如图:

一般波特率和串口名这两就能确定收发功能了,其余的位数、校验位之类的功能自己根据需求添加,这些功能找下公共函数就有了,qt的功能大多看名字就知道,不知道的翻译软件自己看看。

首先,要定义个串口对象

QSerialPort m_serial;

然后根据UI的button写功能

eg:刷新串口

//刷新串口
void SerialPort::on_pushButton_Refresh_clicked()
{
    //清空串口名
    ui->comboBox_serialportname->clear();
    //遍历串口信息
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        ui->comboBox_serialportname->addItem(info.portName());
        int baud = m_serial.baudRate();
        ui->comboBox_baudrate->addItem(QString("%1").arg(baud));
    }
}

写的时候注意点就是数据类型的转换,如果数据类型不符的话可以适当转换下。

依次写完按钮功能就可以完成简单的串口通信了。

四、测试操作视频

串口

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值