用qt写一个串口收发类
以下是一个简单的串口收发类,使用Qt的QSerialPort类。
Header文件:
#ifndef SERIALPORT_H
#define SERIALPORT_H
#include <QObject>
#include <QSerialPort>
class SerialPort : public QObject
{
Q_OBJECT
public:
explicit SerialPort(QObject *parent = nullptr);
~SerialPort();
bool open(QString portName, int baudRate);
void close();
bool send(const QByteArray &data);
QByteArray receive();
private slots:
void onReadyRead();
private:
QSerialPort *serialPort;
QByteArray buffer;
};
#endif // SERIALPORT_H
源文件:
#include "serialport.h"
SerialPort::SerialPort(QObject *parent) : QObject(parent)
{
serialPort = new QSerialPort(this);
connect(serialPort, &QSerialPort::readyRead, this, &SerialPort::onReadyRead);
}
SerialPort::~SerialPort()
{
close();
}
bool SerialPort::open(QString portName, int baudRate)
{
if (serialPort->isOpen())
close();
serialPort->setPortName(portName);
serialPort->setBaudRate(baudRate);
serialPort->setDataBits(QSerialPort::Data8);
serialPort->setParity(QSerialPort::NoParity);
serialPort->setStopBits(QSerialPort::OneStop);
serialPort->setFlowControl(QSerialPort::NoFlowControl);
return serialPort->open(QIODevice::ReadWrite);
}
void SerialPort::close()
{
if (serialPort->isOpen())
serialPort->close();
}
bool SerialPort::send(const QByteArray &data)
{
if (!serialPort->isOpen())
return false;
return serialPort->write(data) == data.size();
}
QByteArray SerialPort::receive()
{
QByteArray data = buffer;
buffer.clear();
return data;
}
void SerialPort::onReadyRead()
{
buffer.append(serialPort->readAll());
}
使用示例:
SerialPort serialPort;
if (serialPort.open("COM1", 9600))
{
QByteArray data = "Hello, world!";
if (serialPort.send(data))
qDebug() << "Sent:" << data;
QThread::msleep(100);
data = serialPort.receive();
qDebug() << "Received:" << data;
}
serialPort.close();
原文地址: https://www.cveoy.top/t/topic/q9S 著作权归作者所有。请勿转载和采集!