在QSerialPort中有一个byteWrited信号(继承自QIODevice),该信号在将多个字节写入底层设备时发出。 如果我们使用QSerialPort写方法发送10Kb数据,则将立即发出bytesWritten信号,表明已将4k数据写入Linux串行端口设备的缓冲区中(因为默认的串行端口写缓冲区大小为1page = 4096B)。
但是,为了显示进度条,我们需要知道串行端口已传输了多少数据。 QSerialPort甚至Linux串行端口字符设备中是否有此类功能?!
注意: QSerialPort中有waitForBytesWritten,它等待清空缓冲区,但是此方法会阻塞事件循环并冻结UI。将串行端口移至另一个线程似乎是一个不错的解决方案,但就我而言,将需要进行很多更改,因此不建议这样做。
编辑: ioctl用于获取输出缓冲区中的字节数,称为TIOCOUTQ。我无法验证这是否适用于串行端口,但是我对其进行了测试,并且每次TIOCOUTQ ioctl调用都得到零(即使串行端口正在发送内容)。