最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt5 串口類QSerialPort的實(shí)現(xiàn)

 更新時(shí)間:2022年05月15日 11:22:44   作者:hebbely  
在Qt5以上提供了QtSerialPort模塊,方便編程人員快速的開發(fā)應(yīng)用串口的應(yīng)用程序。本文主要介紹了Qt5 串口類QSerialPort的實(shí)現(xiàn),,感興趣的可以了解一下

簡述

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

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

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

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

使用Qt5進(jìn)行串口通信大致步驟為:配置串口參數(shù)->打開串口->收發(fā)數(shù)據(jù)。

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

QT += serialport

Qt版本:5.12.8

1.QSerialPortInfo類   

列舉出電腦上全部的串口設(shè)備,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();
}

顯示的結(jié)果如下:

Name :  "COM17"
Description :  "USB-SERIAL CH340"
Manufacturer:  "wch.cn"
Serial Number:  ""
System Location:  "\\\\.\\COM17"
Name :  "COM1"
Description :  "通信端口"
Manufacturer:  "(標(biāo)準(zhǔn)端口類型)"
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口上時(shí)獲得的串口名稱可能有變化,這時(shí)可以利用串口的序列號,指定程序使用某一個(gè)確定的串口。

#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);                //設(shè)置串行端口的名稱
    m_SerialPort->setBaudRate(QSerialPort::Baud115200); //波特率:115200 bps
    m_SerialPort->setDataBits(QSerialPort::Data8);      //數(shù)據(jù)位:8 位
    m_SerialPort->setStopBits(QSerialPort::OneStop);    //停止位:1 位
    m_SerialPort->setParity(QSerialPort::NoParity);     //校驗(yàn)位:無
    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();    //丟棄緩沖區(qū)中的所有字符, 同時(shí)終止掛起的讀取或?qū)懭氩僮?
    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();    //盡可能多地從內(nèi)部寫緩沖區(qū)寫入底層串口而不阻塞
    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();
}

到此這篇關(guān)于Qt5 串口類QSerialPort的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Qt5 串口類QSerialPort內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++二維數(shù)組中的查找算法示例

    C++二維數(shù)組中的查找算法示例

    這篇文章主要介紹了C++二維數(shù)組中的查找算法,結(jié)合實(shí)例形式分析了C++二維數(shù)組進(jìn)行查找的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-05-05
  • C++內(nèi)存模型與名稱空間概念講解

    C++內(nèi)存模型與名稱空間概念講解

    這篇文章主要介紹了C++內(nèi)存模型與名稱空間,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • 淺析結(jié)束程序函數(shù)exit, _exit,atexit的區(qū)別

    淺析結(jié)束程序函數(shù)exit, _exit,atexit的區(qū)別

    在一個(gè)程序中最多可以用atexit()注冊32個(gè)處理函數(shù),這些處理函數(shù)的調(diào)用順序與其注冊的順序相反,也即最先注冊的最后調(diào)用,最后注冊的最先調(diào)用
    2013-09-09
  • Visual?Studio2022報(bào)錯(cuò)無法打開源文件?"openssl/conf.h"解決方法

    Visual?Studio2022報(bào)錯(cuò)無法打開源文件?"openssl/conf.h"解決方法

    這篇文章主要介紹了Visual?Studio2022報(bào)錯(cuò)無法打開源文件"openssl/conf.h"解決方式,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • C語言簡明講解變量的屬性

    C語言簡明講解變量的屬性

    我們知道以在?C?語言中的變量有自己的屬性,只要在定義變量的時(shí)候加上“屬性”關(guān)鍵字即可?!皩傩浴标P(guān)鍵字指明變量的特有意義,但是?register?關(guān)鍵字只是請求寄存器變量,所以不一定會(huì)成功
    2022-04-04
  • C語言驅(qū)動(dòng)開發(fā)之內(nèi)核文件的讀寫

    C語言驅(qū)動(dòng)開發(fā)之內(nèi)核文件的讀寫

    這篇文章主要為大家詳細(xì)介紹了C語言驅(qū)動(dòng)開發(fā)中內(nèi)核文件的讀寫的系列函數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • C++中發(fā)送HTTP請求的實(shí)現(xiàn)方式

    C++中發(fā)送HTTP請求的實(shí)現(xiàn)方式

    使用C++編程發(fā)送HTTP請求通常需要使用第三方的HTTP庫或框架,在C++中,有幾個(gè)受歡迎的HTTP庫可供選擇,例如Curl、Boost.Beast和cpp-httplib,另外,也可以自己實(shí)現(xiàn)socket來發(fā)送http請求,需要的朋友可以參考下
    2024-04-04
  • C++IO流之fstream,?stringstream使用小結(jié)

    C++IO流之fstream,?stringstream使用小結(jié)

    C語言中常用的輸入輸出函數(shù)有如下幾種:前者是格式化標(biāo)準(zhǔn)輸入輸出,后者是格式化文件輸入輸出,最后是格式化字符串輸入輸出,這篇文章主要介紹了C++IO流:fstream,?stringstream總結(jié),需要的朋友可以參考下
    2022-04-04
  • C語言實(shí)現(xiàn)三子棋小游戲(vs2013多文件)

    C語言實(shí)現(xiàn)三子棋小游戲(vs2013多文件)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)三子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++靜態(tài)鏈接與動(dòng)態(tài)鏈接詳解

    C++靜態(tài)鏈接與動(dòng)態(tài)鏈接詳解

    下面小編就為大家介紹C++靜態(tài)鏈接與動(dòng)態(tài)鏈接。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-10-10

最新評論

宣威市| 仙桃市| 大埔区| 田东县| 灵石县| 涿州市| 伽师县| 漾濞| 澎湖县| 虹口区| 鄂托克前旗| 潮安县| 卫辉市| 调兵山市| 内丘县| 兴安县| 曲沃县| 灌阳县| 佛学| 鲜城| 南城县| 林甸县| 毕节市| 铁岭市| 信丰县| 平凉市| 辉县市| 通海县| 高尔夫| 西丰县| 洪泽县| 微山县| 中山市| 云南省| 平凉市| 张掖市| 班玛县| 青海省| 敦煌市| 永靖县| 浦北县|