QT+= serialport
serialPort_.h
1 #ifndef SERIALPORT__H
2 #define SERIALPORT__H
3
4 #include <QObject>
5 #include <QSerialPort>
6 #include <QSerialPortInfo>
7
8
9
10 class serialPort_:public QObject
11 {
12 Q_OBJECT
13
14 public:
15 serialPort_(QObject*o=0);
16
17 /**
18 * @projectName testMyClass
19 * @brief 打开串口 根据名字 波特率 数据位 校验位 停止位 流控制
20 * 返回打开成功还是失败
21 * @author SMY
22 * @date 2019-03-21
23 */
24
25 bool openPort(QString portName,qint32 baudRate,QSerialPort::DataBits dataBits,
26 QSerialPort::Parity parity,QSerialPort::StopBits stopBits,
27 QSerialPort::FlowControl flowControl);
28
29 /**
30 * @projectName testMyClass
31 * @brief 是否打开串口
32 * @author SMY
33 * @date 2019-03-21
34 */
35 bool isOpen()const{
36 return m_port->isOpen();
37 }
38
39 /**
40 * @projectName testMyClass
41 * @brief 关闭串口
42 * @author SMY
43 * @date 2019-03-21
44 */
45 void closePort(){
46 m_port->clear();
47 m_port->close();
48 }
49 /**
50 * @projectName testMyClass
51 * @brief 获取可用的串口名字
52 * @author SMY
53 * @date 2019-03-21
54 */
55 QStringList getAvailablePortNameList()const
56 {
57 QStringList portName;
58 foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
59 portName<<info.portName();
60
61 }
62 return portName;
63 }
64
65 /**
66 * @projectName testMyClass
67 * @brief 串口写数据
68 * @author SMY
69 * @date 2019-03-21
70 */
71 void write(QString str);
72 void write(const char *data, qint64 len);
73
74 /**
75 * @projectName testMyClass
76 * @brief QByteArray 转换为 QString
77 * @author SMY
78 * @date 2019-03-21
79 */
80 QString ByteArrayToHexString(QByteArray data);
81
82 signals:
83 /**
84 * @projectName testMyClass
85 * @brief 串口读取到数据的信号
86 * @author SMY
87 * @date 2019-03-21
88 */
89
90 void readyRead(QByteArray data);
91
92 private:
93 QSerialPort *m_port;
94
95 void readyRead_slot();
96
97
98
99 };
100
101 #endif // SERIALPORT__H
serialPort_.cpp
1 #include "serialport_.h"
2
3 serialPort_::serialPort_(QObject *o)
4 {
5 m_port = new QSerialPort();
6
7
8 connect(m_port,&QSerialPort::readyRead,this,&serialPort_::readyRead_slot);
9
10 }
11
12 bool serialPort_::openPort(QString portName, qint32 baudRate,
13 QSerialPort::DataBits dataBits, QSerialPort::Parity parity,
14 QSerialPort::StopBits stopBits, QSerialPort::FlowControl flowControl)
15 {
16
17 m_port->setPortName(portName);
18 m_port->setBaudRate(baudRate);
19 m_port->setDataBits(dataBits);
20 m_port->setParity(parity);
21 m_port->setStopBits(stopBits);
22 m_port->setFlowControl(flowControl);
23
24 if(m_port->open(QIODevice::ReadWrite))
25 {
26 return true;
27 }
28 else
29 return false;
30 }
31
32 void serialPort_::write(QString str)
33 {
34 m_port->write(str.toUtf8().data());
35 }
36
37 void serialPort_::write(const char *data, qint64 len)
38 {
39 m_port->write(data,len);
40 }
41
42 QString serialPort_::ByteArrayToHexString(QByteArray data)
43 {
44 QString ret(data.toHex().toUpper());
45 int len = ret.length()/2;
46 for(int i=1;i<len;i++)
47 {
48 ret.insert(2*i+i-1," ");
49 }
50
51 return ret;
52 }
53
54 void serialPort_::readyRead_slot()
55 {
56 QByteArray data = m_port->readAll();
57 emit readyRead(data);
58 }