<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在Qt5以上提供了QtSerialPort模組,方便程式設計人員快速的開發應用串列埠的應用程式。
QtSerialPort模組中提供了兩個C++類別,分別是QSerialPort 和QSerialPortInfo。
QSerialPort 類是Qt5封裝的串列埠類,可與串列埠進行通訊,提供了操作串列埠的各種介面。
QSerialPortInfo類是一個輔助類,可以提供計算機中可用串列埠的各種資訊。如可用的串列埠名稱,描述,製造商,序列號,串列埠16位元產品編號等。利用QSerialPortInfo提供的可用串列埠資訊,可設定串列埠波特率,並開啟需要的串列埠進行通訊。
使用Qt5進行串列埠通訊大致步驟為:設定串列埠引數->開啟串列埠->收發資料。
要使用QtSerialPort模組,需要在工程檔案.pro檔案或.pri中增加語句:
QT += serialport
Qt版本:5.12.8
列舉出電腦上全部的串列埠裝置,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(); }
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內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45