一、添加文件
①在项目中添加C++文件,继承自QObject
②添加必要模块以及头文件
项目pro文件添加 serialport模块
项目.h文件中添加头文件
#include <QSerialPort>
#include <QSerialPortInfo>
二、具体代码
①在.h文件中声明一个类对象
QSerialPort *serial;
并在.cpp构造函数中实例化
②定义一个public的打开串口函数,串口号、波特率、数据位等等可根据情况选择
sendMessage是一个自定义信号,可更换qdebug打印信息
void SerialRFID::Open_serial_RFID()
{
QString portName = "COM8";
QString baudRate = "9600";
QSerialPortInfo info(portName);
if(info.isBusy())
{
sendMessage("COM:" + portName + "--The serial port is occupied");
return;
}
serial -> setPortName(portName);
serial -> setBaudRate(baudRate.toInt());
serial -> setStopBits(QSerialPort::TwoStop);
serial -> setDataBits(QSerialPort::Data7);
serial -> setParity(QSerialPort::EvenParity);
serial -> setFlowControl(QSerialPort::NoFlowControl);
bool flag = serial -> open(QIODevice::ReadWrite);
if(!flag)
{
sendMessage("COM:" + portName + "--Failed to open serial port:");
serial -> clearError();
}
else
{
sendMessage("COM:" + portName + "--The serial port is open:");
}
}
③定义一个槽函数,并在构造函数中连接
connect(serial,SIGNAL(readyRead()),this,SLOT(slot_serialRead()));
在读串口数据槽函数中对读到的数据进行处理
void SerialRFID::slot_serialRead()
{
QByteArray receiveBuf = serial -> readAll();
QString RS = receiveBuf;
。。。
}
④定义一个public类型函数进行写串口数据,参数可去掉
void SerialRFID::slot_readHRWordData(int address)
{
QString startStr = "RDSTA101000064";
char *readStr;
startStr.append("*\r");
QByteArray readBa = startStr.toUtf8();
readStr = readBa.data();
serial -> clear();
serial -> write(readStr);
}