Qt的QSerialPort 使用注意事项

基本用法就不说了,说一下注意点:

1、不可以跨线程使用,比如GUI构造,传指针给子线程,NO!

2、同步和异步方法不可以混用,同步包括waitForReadyRead, waitForByteWritten这2个函数;异步方法包括dataReady, byteWritten等信号,注意,一定不能既用waitForReadyRead又用dataReady,同理发送也是。

一般地,程序只有一个GUI线程,那用异步不会卡死。如果用QThread来读写,那就用同步方法。

3、同步方法(多线程)下,waitForReadyRead有个坑:

while(1){
    /* 此方法可能一直返回 false导致无法读数
    if(sp.waitForReadyRead(50){
    }*/
    // 要改成如下:
    sp.waitForReadyRead(50);
    if(sp.bytesAvailable()){
        ba = sp.readAll();
        //while(sp.bytesAvailable())
        while(sp.waitForReadyRead(10))
            ba += sp.readAll();
    }
    // 其他条件
    // break;
}

就是说,一次readAll后,还不能确定全读完了,要再次循环读。

4、官方有3个例子,有同步也有异步,非常好的例子,一定要看:

Blocking Master Example | Qt Serial Port 5


搞清楚这些基本就没啥问题了。在Github上有个有名气的串口工程支持图形,也可以参考。

本文为3YL原创,转载无需联系,但请注明来自labisart.com。

原创文章不易,如果觉得有帮助,可打赏或点击右侧广告支持:

查看打赏记录

发表评论请遵守党国法律!后台审核后方可显示!
  • 最新评论
  • 总共0条评论
  • Blog v1.1© 2024 labisart.com 版权所有 | 联系:labartwork@163.com