Qt 在windows下的串口读写

添加serialport模块支持

QT       += core gui serialport

在这里插入图片描述

添加头文件

#include <QtSerialPort>

创建串口对象

private:
	QSerialPort *serial;

创建必要的槽函数

private slots:
	void getData();        // 串口数据接受的槽函数
	void writeData(char *data, qint64 len);	// 数据发送
	void error(QSerialPort::SerialPortError serialPortError); // 操作错误槽函数

端口号获取

    QList<QString> portList;
    portList.clear();
    QList<QSerialPortInfo> serialPortInfo = QSerialPortInfo::availablePorts();
    //搜索串口
    for (int i=0;i<serialPortInfo.length();i++) {
        qDebug() << "Name        : " << serialPortInfo[i].portName();
        qDebug() << "Description : " << serialPortInfo[i].description();
        qDebug() << "Manufacturer: " << serialPortInfo[i].manufacturer();
        portList.append(serialPortInfo[i].portName());
    }

初始化串口参数连接相关槽函数

serial = new QSerialPort(this);
serial->setPortName("COM25");               // 设置端口
serial->setBaudRate(115200);                // 波特率
serial->setDataBits(QSerialPort::Data8);    // 数据位
serial->setParity(QSerialPort::NoParity);   // 校验位
serial->setStopBits(QSerialPort::OneStop);  // 停止位
serial->setFlowControl(QSerialPort::NoFlowControl); // 无数据流控
// 绑定后信号槽函数:
connect(serial, SIGNAL(readyRead()), this, SLOT(getData()));
connect(serial, SIGNAL(errorOccurred(QSerialPort::SerialPortError)),this, SLOT(error(QSerialPort::SerialPortError)));
// 确认参数没有问题过后就以可读可写方式打开串口
serial->open(QIODevice::ReadWrite);

槽函数

void MainWindow::getData()
{
    char rebuf[1024];    // 数据接受缓存
    int length = serial->read(rebuf, 1024);
    // 打印接收到的内容,length是实际读取的数量
    for(int i=0; i<length; i++)
    {
        qDebug("%d",rebuf[i]);
    }
}

// 可以当成普通函数来使用,根据需要来处理是否需要连接信号
void MainWindow::writeData(char *data, qint64 len)       
{
    if(serial->isOpen())
    {
        serial->write(data,len);
    }
    else
    {
        qDebug("端口未打开");
    }
}

void MainWindow::error(QSerialPort::SerialPortError serialPortError)
{
}

上面具体serialPortError具体是什么错可以添加判断根据情况处理,可能出现的错误类型如下

    enum SerialPortError {
        NoError,
        DeviceNotFoundError,
        PermissionError,
        OpenError,
        ParityError,
        FramingError,
        BreakConditionError,
        WriteError,
        ReadError,
        ResourceError,
        UnsupportedOperationError,
        UnknownError,
        TimeoutError,
        NotOpenError
    };
    Q_ENUM(SerialPortError)

比较简单适合初学者,可以直接下载demo

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xflySnail

码字不易,鼓励鼓励...

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

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

打赏作者

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

抵扣说明:

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

余额充值