91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt5串口類QSerialPort怎么實現

發布時間:2022-05-16 09:35:18 來源:億速云 閱讀:243 作者:iii 欄目:開發技術

這篇文章主要講解了“Qt5串口類QSerialPort怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Qt5串口類QSerialPort怎么實現”吧!

簡述

在Qt5以上提供了QtSerialPort模塊,方便編程人員快速的開發應用串口的應用程序。        

QtSerialPort模塊中提供了兩個C++類,分別是QSerialPort 和QSerialPortInfo。

 QSerialPort 類是Qt5封裝的串口類,可與串口進行通信,提供了操作串口的各種接口。

QSerialPortInfo類是一個輔助類,可以提供計算機中可用串口的各種信息。如可用的串口名稱,描述,制造商,序列號,串口16位產品編號等。利用QSerialPortInfo提供的可用串口信息,可設置串口波特率,并打開需要的串口進行通信。

使用Qt5進行串口通信大致步驟為:配置串口參數->打開串口->收發數據。

要使用QtSerialPort模塊,需要在工程文件.pro文件或.pri中增加語句:

QT += serialport

Qt版本:5.12.8

1.QSerialPortInfo類   

列舉出電腦上全部的串口設備,Cpp 文件如下:

#include <QCoreApplication>
#include <QDebug>
 
#include <QSerialPort>
#include <QSerialPortInfo>
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        qDebug() << "Name : " << info.portName();
        qDebug() << "Description : " << info.description();
        qDebug() << "Manufacturer: " << info.manufacturer();
        qDebug() << "Serial Number: " << info.serialNumber();
        qDebug() << "System Location: " << info.systemLocation();
    }
    return a.exec();
}

顯示的結果如下:

Name :  "COM17"
Description :  "USB-SERIAL CH340"
Manufacturer:  "wch.cn"
Serial Number:  ""
System Location:  "\\\\.\\COM17"
Name :  "COM1"
Description :  "通信端口"
Manufacturer:  "(標準端口類型)"
Serial Number:  ""
System Location:  "\\\\.\\COM1"
Name :  "COM16"
Description :  "Prolific USB-to-Serial Comm Port"
Manufacturer:  "Prolific"
Serial Number:  "A400G3UXA"
System Location:  "\\\\.\\COM16"
Name :  "COM11"
Description :  "Prolific USB-to-Serial Comm Port"
Manufacturer:  "Prolific"
Serial Number:  ""
System Location:  "\\\\.\\COM11"

若USB串口每次插在不同的USB口上時獲得的串口名稱可能有變化,這時可以利用串口的序列號,指定程序使用某一個確定的串口。

#include <QCoreApplication>
#include <QDebug>
#include <QSerialPort>
#include <QSerialPortInfo>
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSerialPortInfo com_info;
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        if( info.serialNumber() == "A400G3UXA" )
        {
            com_info = info;
            break;
        }
    }
    qDebug() << "Name : " << com_info.portName();
    qDebug() << "Description : " << com_info.description();
    qDebug() << "serialNumber: " << com_info.serialNumber();
    return a.exec();
}

2.QSerialPort類

QSerialPort 類提供了操作串口的各種接口。

頭文件:

class MySerial : public QObject
{
    Q_OBJECT
public:
    MySerial(QString portName = "ttyUSB1", QObject *parent = nullptr);
    ~MySerial();
    bool WriteToSerial(QByteArray cmd);
    QByteArray ReadFromSerial();
    bool SerialIsOpen() { return m_SerialPort->isOpen(); }
    void closeSerial();
signals:
    void sig_SendTipInfo(bool result, QString info);
    void sig_SendReadData(QByteArray data);
 
private:
    QSerialPort *m_SerialPort = nullptr;
};

cpp文件:

MySerial::MySerial(QString portName, QObject *parent) :
    QObject(parent)
{
    m_SerialPort = new QSerialPort();
    m_SerialPort->setPortName(portName);                //設置串行端口的名稱
    m_SerialPort->setBaudRate(QSerialPort::Baud115200); //波特率:115200 bps
    m_SerialPort->setDataBits(QSerialPort::Data8);      //數據位:8 位
    m_SerialPort->setStopBits(QSerialPort::OneStop);    //停止位:1 位
    m_SerialPort->setParity(QSerialPort::NoParity);     //校驗位:無
    m_SerialPort->setFlowControl(QSerialPort::NoFlowControl);
    qDebug() << "Port Name:" << portName;
    if(!m_SerialPort->open(QIODevice::ReadWrite))
    {
        emit sig_SendTipInfo(false, "opened failed");
        qDebug() << "open failed";
    }
    else qDebug() << "open successfully";
}
 
MySerial::~MySerial()
{
    m_SerialPort->clear();    //丟棄緩沖區中的所有字符, 同時終止掛起的讀取或寫入操作
    m_SerialPort->close();
    m_SerialPort->deleteLater();
}
 
bool MySerial::WriteToSerial(QByteArray cmd)
{
    if(cmd.isEmpty()) return false;
//    qDebug() << "[ == MySerial == ] Send Data:" << cmd.toHex();
    this->m_SerialPort->clear();
    this->m_SerialPort->write(cmd);
    this->m_SerialPort->flush();    //盡可能多地從內部寫緩沖區寫入底層串口而不阻塞
    this->m_SerialPort->waitForBytesWritten(10);
    return true;
}
 
QByteArray MySerial::ReadFromSerial()
{
    QByteArray readData;
    this->m_SerialPort->waitForReadyRead(5);
    readData.append(this->m_SerialPort->readAll());
    while (this->m_SerialPort->waitForReadyRead(5)) readData.append(this->m_SerialPort->readAll());
    if(readData.isEmpty()) return QByteArray();
//    qDebug() << "[ == MySerial == ] Read Data:" << readData.toHex();
    return readData;
}
 
void MySerial::closeSerial()
{
    if(!m_SerialPort->isOpen()) return;
    m_SerialPort->clear();
    m_SerialPort->close();
}

感謝各位的閱讀,以上就是“Qt5串口類QSerialPort怎么實現”的內容了,經過本文的學習后,相信大家對Qt5串口類QSerialPort怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高阳县| 龙川县| 嫩江县| 广元市| 宜章县| 庆安县| 南溪县| 宁远县| 安西县| 佳木斯市| 德昌县| 大城县| 乐业县| 山阳县| 吴江市| 绥芬河市| 资兴市| 聂荣县| 天祝| 舞钢市| 东方市| 博野县| 东乌珠穆沁旗| 吴川市| 株洲市| 海宁市| 房产| 拉萨市| 原阳县| 朝阳县| 平凉市| 三门峡市| 嘉兴市| 松潘县| 固镇县| 沧州市| 建始县| 平昌县| 佛教| 库伦旗| 衡山县|