基本用法就不说了,说一下注意点:
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上有个有名气的串口工程支持图形,也可以参考。