Qt 串口 封装好的类 直接使用

85 篇文章 9 订阅

https://blog.csdn.net/weixin_42837024/article/details/88847082

QT+= serialport

serialPort_.h

#ifndef SERIALPORT__H
#define SERIALPORT__H

#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">&amp;</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">&amp;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值