QT5简易串口助手设计

      串口通讯是目前外设和计算机间最常用的通讯方式之一,项目中制作测试软件、产测工具时经常要用到串口通信,故在此总结一个QT串口使用示例,以作备忘。

首先,新建工程,在工程文件中添加串口模块:

QT   += serialport

然后添加串口所需头文件:

#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>

设计简易的界面:

自动检测当前可以使用的端口号:

ui->textBrowser->append("检测到端口列表:");
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())  //搜索当前可用的端口号
{
    QSerialPort serial;
    serial.setPort(info);
    if (serial.open(QIODevice::ReadWrite))
    {
        ui->port->addItem(info.portName());
        ui->textBrowser->append(info.portName());//端口名称
        ui->textBrowser->append(info.description());
        ui->textBrowser->append(info.manufacturer());
        serial.close();
    }
}

初始化串口部分相关代码:

        my_serialport = new QSerialPort();
        my_serialport->setPortName(ui->port->currentText());
        my_serialport->open(QIODevice::ReadWrite);
        my_serialport->setBaudRate(ui->baudrate->currentText().toInt());

        switch(ui->check_bit->currentIndex()) //校验位
        {
            case 0: my_serialport->setParity(QSerialPort::NoParity);break;
            case 1: my_serialport->setParity(QSerialPort::OddParity);break;
            case 2: my_serialport->setParity(QSerialPort::EvenParity);break;
            default: break;
        }
        switch(ui->data_bit->currentIndex()) //数据位
        {
            case 0: my_serialport->setDataBits(QSerialPort::Data8);break;
            case 1: my_serialport->setDataBits(QSerialPort::Data7);break;
            case 2: my_serialport->setDataBits(QSerialPort::Data6);break;
            default: break;
        }
        switch(ui->stop_bit->currentIndex()) //结束位
        {
            case 0: my_serialport->setStopBits(QSerialPort::OneStop);break;
            case 1: my_serialport->setStopBits(QSerialPort::TwoStop);break;
            default: break;
        }

        my_serialport->setFlowControl(QSerialPort::NoFlowControl);  //流控

        connect(my_serialport,SIGNAL(readyRead()),this,SLOT(recv_data())); //建立信号和槽,当接收到串口数据时候响应槽函数

发送串口数据部分相关代码:

if(ui->textEdit->toPlainText().isEmpty())
    return;
QString text = ui->textEdit->toPlainText();
qDebug()<<text;
my_serialport->write(text.toLocal8Bit()); //发送串口数据

槽函数处理相关代码:(接收到的数据需要自己根据具体业务功能进行处理)

QByteArray rcv_Data;
rcv_Data = my_serialport->readAll(); //读取串口缓冲区中的串口数据
if(!rcv_Data.isEmpty())
{
    ui->textBrowser->append(QString(rcv_Data.toHex()));
    rcv_Data.clear();
}

其他就不详细介绍了,具体直接看源码:https://download.csdn.net/download/fangye945a/10920770

猜你喜欢

转载自blog.csdn.net/fangye945a/article/details/86562853