在qserialport中,有一个bytesswrited信号(继承自qiodevice),当向下位设备写入多个字节时会发出该信号。
如果我们使用qserialport write方法发送10KB的数据,bytesswrite信号将立即发出,指示4K的数据已写入Linux串行端口设备的缓冲区(因为默认的串行端口写入缓冲区大小为1page=4096b)。
但是,要显示进度条,我们需要知道串行端口传输了多少数据。
qserialport甚至linux串行端口字符设备中是否有这样的功能?啊!
注:
qserialport中有waitforbytes,它等待缓冲区被清空,但此方法会阻塞事件循环并冻结ui。将串行端口移到另一个线程中似乎是一个很好的解决方案,但在我的情况下,需要做很多更改,这是不可取的。
编辑:
有ioctl用于获取输出缓冲区中的字节数,称为tiocoutq。我无法验证这是否适用于串行端口,但是我测试了它,每次调用tiocoutq ioctl时都会得到零(即使串行端口正在发送某些东西)。