Qt串口通訊


     一段時間以來,Qt的串口通訊一直是一個亟待解決的問題。上網調研了一段時間后,有了以下發現:

     1.在早期的Qt版本中,主要是采用第三方類作為Qt對串口通訊的支持,具體可參考http://blog.csdn.net/yafeilinux/article/details/4717706

     2.在進入Qt5的時代后,串口通訊已經作為Qt的一個附件部分,但沒有作為Qt的正式模塊。使用這樣的串口模塊時,需要自行編譯串口部分,具體可參考:http://blog.csdn.net/chenlong12580/article/details/8976176

 

     鑒於以上兩種做法都比較復雜,本人一直沒有調試串口通訊部分,直到最近才不得不重新審視這部分的工作。剛好在這段時間Qt5.1.0的穩定版本發布,在閱讀新特性時才發現,串口模塊已經正式成為了Qt的官方部分(參考:http://www.ics.com/blog/whats-new-qt-51-qtserialport#.Ue9zBocsnXAIt officially becomes part of Qt with the 5.1.0 release.)。於是我下載了最新的Qt版本Qt 5.1.0 for Windows 32-bit (VS 2010, OpenGL, 504 MB) ,安裝完成后,發現果然在安裝文件中多了QtSerialPort部分。同時我在VS2010中新建了一個Qt工程,用以測試Qt的串口通訊,只可惜在添加Qt的模塊時,並沒有找到SerialPort,這就必須在建立工程后手動添加了,比較麻煩!

 

     最后附上一個測試程序,參考網頁:http://www.ics.com/blog/whats-new-qt-51-qtserialport#.Ue9zBocsnXA

#include <QCoreApplication> #include <QDebug> #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo>

int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qDebug() << "Number of serial ports:" << QSerialPortInfo::availablePorts().count(); foreach (const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts()) { qDebug() << "\nPort:" << serialPortInfo.portName(); qDebug() << "Location:" << serialPortInfo.systemLocation(); qDebug() << "Description:" << serialPortInfo.description(); qDebug() << "Manufacturer:" << serialPortInfo.manufacturer(); qDebug() << "Vendor Identifier:" << (serialPortInfo.hasVendorIdentifier() ? QByteArray::number(serialPortInfo.vendorIdentifier(), 16) : QByteArray()); qDebug() << "Product Identifier:" << (serialPortInfo.hasProductIdentifier() ? QByteArray::number(serialPortInfo.productIdentifier(), 16) : QByteArray()); qDebug() << "Busy:" << (serialPortInfo.isBusy() ? QObject::tr("Yes") : QObject::tr("No")); QSerialPort *port = new QSerialPort(serialPortInfo); if (port->open(QIODevice::ReadWrite)) { qDebug() << "Baud rate:" << port->baudRate(); qDebug() << "Data bits:" << port->dataBits(); qDebug() << "Stop bits:" << port->stopBits(); qDebug() << "Parity:" << port->parity(); qDebug() << "Flow control:" << port->flowControl(); qDebug() << "Read buffer size:" << port->readBufferSize(); port->close(); } else { qDebug() << "Unable to open port, error code" << port->error(); } delete port; } return 0; }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM