自己封装的串口类 接收那也一块设置的接口 自己已经测试过
头文件
#ifndef SETSERIALPORT_H
#define SETSERIALPORT_H
#include <QObject>
#include <QString>
#include <QSerialPort>
#include <QByteArray>
#include <QDebug>
class SetSerialPort : public QObject
{
Q_OBJECT
public:
explicit SetSerialPort(QObject *parent = 0);
~SetSerialPort();
int getBaud() const;
QString getPortName() const;
int getDataBits() const;
int getParityBits() const;
int getStopBits() const;
void setBaudType(int baud);
void setPortNameType(QString portName);
void setDataBitsType(int dataBits);
void setParityBitsType(int parityBits);
void setStopBitsType(int stopBits);
void openSerialPort();
void sendDatas(QByteArray);
QByteArray recvDatas();
void closeType();
// 字符串处理
char ConvertHexChar(char ch);
void String2Hex(QString str, QByteArray &senddata);
signals:
public slots:
private:
int m_baud;
QString m_portName;
QSerialPort::DataBits m_dataBits;
QSerialPort::Parity m_parityBits;
QSerialPort::StopBits m_stopBits;
QSerialPort* comSerialPort;
};
#endif // SETSERIALPORT_H
源文件
#include "setserialport.h"
#include <QMessageBox>
SetSerialPort::SetSerialPort(QObject *parent) :
QObject(parent)
{
comSerialPort = new QSerialPort();
}
SetSerialPort::~SetSerialPort()
{
}
void SetSerialPort::setBaudType(int baud)
{
m_baud = baud;
}
void SetSerialPort::setPortNameType(QString portName)
{
m_portName = portName;
}
void SetSerialPort::setDataBitsType(int dataBits)
{
m_dataBits = (QSerialPort::DataBits)dataBits;
}
void SetSerialPort::setParityBitsType(int parityBits)
{
m_parityBits = (QSerialPort::Parity)parityBits;
}
void SetSerialPort::setStopBitsType(int stopBits)
{
m_stopBits = (QSerialPort::StopBits)stopBits;
}
//void SetSerialPort::setRecvDataArray(QByteArray rvDatas)
//{
// recvDataArray = rvDatas;
//}
// get the value of the class
int SetSerialPort::getBaud() const
{
return m_baud;
}
QString SetSerialPort::getPortName() const
{
return m_portName;
}
int SetSerialPort::getDataBits() const
{
return m_dataBits;
}
int SetSerialPort::getParityBits() const
{
return m_parityBits;
}
int SetSerialPort::getStopBits() const
{
return m_stopBits;
}
void SetSerialPort::openSerialPort()
{
comSerialPort->setPortName(m_portName);
comSerialPort->setBaudRate(m_baud);
comSerialPort->setDataBits(m_dataBits);
comSerialPort->setParity(m_parityBits);
comSerialPort->setStopBits(m_stopBits);
comSerialPort->setFlowControl(QSerialPort::NoFlowControl);
if(!comSerialPort->open(QIODevice::ReadWrite))
{
QMessageBox::information(0,tr("Notice:"),tr("SerialPort open failed!"));
}
}
// 发送16进制的数据
void SetSerialPort::sendDatas(QByteArray senddatas)
{
if(comSerialPort->isOpen())
{
// qDebug()<<tr("serialPort sendDatas:")<<sendDataArray;
int rest = comSerialPort->write(senddatas);
if(rest == -1)
{
QMessageBox::information(0,tr("Error"),tr("serialPort send datas Error!"));
}
}
}
// 接收
QByteArray SetSerialPort::recvDatas()
{
QByteArray recvDataArray = comSerialPort->readAll();
qDebug()<<tr("serialPort recvDatas:")<<recvDataArray;
return recvDataArray;
}
void SetSerialPort::closeType()
{
if(comSerialPort->isOpen())
{
comSerialPort->close();
}
}
//检测一个字符是不是十六进制字符,若是返回相应的值,否则返回0x10;
char SetSerialPort::ConvertHexChar(char ch)
{
if((ch >= '0') && (ch <= '9'))
return ch-0x30;
else if((ch >= 'A') && (ch <= 'F'))
return ch-'A'+10;
else if((ch >= 'a') && (ch <= 'f'))
return ch-'a'+10;
else return (-1);
}
//将一个字符串作为十六进制串转化为一个字节数组,字节间可用空格分隔,返回转换后的字节数组长度,同时字节数组长度自动设置。
void SetSerialPort::String2Hex(QString str, QByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen = 0;
int len = str.length();
qDebug()<<tr("要转换的长度")<<len;//计算数据长度
senddata.resize(len/2);
char lstr,hstr;
for(int i=0; i<len; )
{
//char lstr,
hstr=str[i].toLatin1();
if(hstr == ' ')
{
i++;
continue;
}
i++;
if(i >= len)
break;
lstr = str[i].toLatin1();
hexdata = ConvertHexChar(hstr);
lowhexdata = ConvertHexChar(lstr);
if((hexdata == 16) || (lowhexdata == 16))
break;
else
hexdata = hexdata*16+lowhexdata;
i++;
senddata[hexdatalen] = (char)hexdata;
hexdatalen++;
}
senddata.resize(hexdatalen);
qDebug()<<"转换数据已结束";//
}
转载请表明出处