【譯】QSerialPort類


 

詳細描述:

       QSerialPort類提供了訪問串口的功能。

       你可以用QSerialPortInfo輔助類獲得可用的串口信息,輔助類列舉了系統所有的串口。這有利於你獲取你需要的串口的正確名稱。你可以將一個輔助類的對象作為參數傳遞給setPort() 或者 setPortName()函數,這可以指定你所需要的串口設備。

       在設置串口之后,你可以調用open()函數,以只讀(r/o)、只寫(w/o)或者讀寫(r/w)模式打開串口。

注意:串口總是以獨占的方式打開的(也即其他的進程或者線程都不能訪問一個已經打開的串口)。

       在成功打開串口之后,QSerialPort類設法決定串口的當前配置,並初始化串口。你可以調用 setBaudRate(), setDataBits(), setParity(),setStopBits(), 以及setFlowControl()函數將串口重新配置成為需要的設置。

       控制引腳信號的狀態由isDataTerminalReady(), isRequestToSend, 以及pinoutSignals()函數決定。可以通過調用setDataTerminalReady()和setRequestToSend()函數改變控制信號線的狀態。

       一旦知道串口已經可以讀或寫,你可以調用read() 或者write()函數去讀或者寫串口。另外也可以方便的調用readLine() 和readAll()函數。若沒有立即讀取所有的數據,那么剩下的數據將會作為新傳入的數據追加到QSerialPort類內部的讀取緩沖區中。你可以通過調用 setReadBufferSize()函數限制讀取緩沖區的大小。

       調用close()函數可以關閉串口並取消I/O操作。

看下面的例子:

int numRead = 0, numReadTotal = 0; char buffer[50]; forever { numRead = serial.read(buffer, 50); // Do whatever with the array
 numReadTotal += numRead; if (numRead == 0 && !serial.waitForReadyRead()) break; }
View Code

       如果waitForReadyRead()返回了false,那么連接已經關閉或者發生了一個錯誤。

       阻塞的串口編程和不阻塞的串口編程本質上是不一樣的。阻塞的串口編程不需要一個事件循環並且通常需要的代碼很少。但在一個GUI程序中,阻塞串口只能在非GUI線程中使用,這樣可以避免界面凍結。

       關於這些方法的詳細信息,可以參閱示例程序。

       QSerialPort類也可以和QTextStream 和QDataStream的流操作(operator<<() 和operator>>())一起使用。但有一點需要注意的是,確保在設法通過operator>>()的重載函數讀取之前有足夠的數據。

 

 

 

 

 


免責聲明!

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



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