QSerialPort 负责具体的串口操作。选定串口后,要先打开串口,才能设置波特率等参数。这些参数都设置好了就可以使用了。最基本的操作无非是read() 和 write()。需要注意的是这两个操作都是非阻塞的。
另外有一个重要的signal 也需要用到,那就是 void QIODevice::readyRead()
每次串口收到数据后都会发出这个signal。我们的程序中需要定义一个slot,并将其与这个signal 相连接。这样,每次新数据到来后,我们就可以在slot中读取数据了。这时一定要将串口缓冲区中的数据全部读出来,可以利用readAll() 来实现。
下面的代码片段给出了设置串口的例子:
m_reader.setPort(info); if(m_reader.open(QIODevice::ReadWrite)) { qDebug() << "m_reader.open(QIODevice::ReadWrite)"; m_reader.setBaudRate(QSerialPort::Baud9600); m_reader.setParity(QSerialPort::NoParity); m_reader.setDataBits(QSerialPort::Data8); m_reader.setStopBits(QSerialPort::OneStop); m_reader.setFlowControl(QSerialPort::NoFlowControl); m_reader.clearError(); m_reader.clear(); connect(&m_reader, SIGNAL(readyRead()), this, SLOT(readyReadSlot())); } void Dialog::readyReadSlot() { qDebug() << "x"; QByteArray arr = m_reader.readAll(); do_something(arr); }