QSerialPort 負責具體的串口操作。選定串口后,要先打開串口,才能設置波特率等參數。這些參數都設置好了就可以使用了。最基本的操作無非是read() 和 write()。需要注意的是這兩個操作都是非阻塞的。
另外有一個重要的signal 也需要用到,那就是 void QIODevice::readyRead()
每次串口收到數據后都會發出這個signal。我們的程序中需要定義一個slot,並將其與這個signal 相連接。這樣,每次新數據到來后,我們就可以在slot中讀取數據了。這時一定要將串口緩沖區中的數據全部讀出來,可以利用readAll() 來實現。
下面的代碼片段給出了設置串口的例子。
1 m_reader.setPort(info); 2 if(m_reader.open(QIODevice::ReadWrite)) 3 { 4 qDebug() << "m_reader.open(QIODevice::ReadWrite)"; 5 m_reader.setBaudRate(QSerialPort::Baud9600); 6 m_reader.setParity(QSerialPort::NoParity); 7 m_reader.setDataBits(QSerialPort::Data8); 8 m_reader.setStopBits(QSerialPort::OneStop); 9 m_reader.setFlowControl(QSerialPort::NoFlowControl); 10 11 m_reader.clearError(); 12 m_reader.clear(); 13 connect(&m_reader, SIGNAL(readyRead()), this, SLOT(readyReadSlot())); 14 } 15 16 17 void Dialog::readyReadSlot() 18 { 19 qDebug() << "x"; 20 QByteArray arr = m_reader.readAll(); 21 do_something(arr); 22 }