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