Qt中对读写设备的支持力度很大,其都继承与QIODevice类,其中有几个方法是非常值得注意的,不管是在用原始的serial port进行通信还是使用网络的TCP/IP 或者UDP或者HTTP等协议时,其实用的方法其实都差不多,主要的有read(int size),readall(),readLine(const char* ,int size),canReadLine(),bytesAvailable(),readData(),write(),flush(),
waitBytesWritten(int msec),readData(char* ,int size),bytesToWritten(),以及几个重要的信号,onReadyRead(),接下来对几个难以理解的函数进行解析。
其中read(int size)是返回QByteArray的,size是你想读取的长度,如果超过buffer中有的数据将会只返回现有的所有数据。
readAll()将读取所有的数据以QByteArray返回。
readLine()函数需要之前开辟一个固定大小的char *,然后调用该函数将制定长度的数据读取到这个指针里面去,size是你想读取的长度,超过将返回全部。
canReadLine()用于读取一行行的数据,当buffer中有换行符号出现的时候就会返回true,这个对于读取以 或这 结尾的数据行非常有效。
bytesAailable()用于返回buffer中读取到的数据,千万不要以为读取了以后这个数字会归零,如果这样,那你就打错热错了,这个数字我觉得是用来统计这个IODevice的总的大小的。
readDtata()的使用和readLine()差不多,都是需要先开辟一个char数组,唯一不同的地方在于readData()可以读取任意长度而不是以回车符号进行判断。
write()将字符串写出去;
flush()的作用其实就是冲马桶,你要写的东西都是放在马桶里面的,不会调用write()就发送,而需要使用flush(),意思时说,全部冲走。
waitBytesWritten(int msec)用于统计现在还存在与buffer中的char数,一边与buffer的写管理。
onReadyRead()主要用于触发,当有字符写进buffer的时候就会出发一次onReadyRead()