天天看點

QT序列槽讀取Serial->readAll()踩過的坑

部落客在制作一個QT軟體與單片機進行資料傳輸(16進制的資料,結束标志是\r\n)的時候資料一直拿不完全。經過多日的研究終于成功了。

坑一:

QByteArray data;
data = Serial->readAll();//拿序列槽中的資料
           

因為序列槽設定的是8位資料位,

QT序列槽讀取Serial->readAll()踩過的坑

是以拿到的資料是32位,但是部落客想要的是“00 10 00 00 00 00 01 00 28 00 0A 01 01 01 01 00 \r\n”。但是QT使用qDebug()拿到是,如圖(這樣的資料不友善處理):

QT序列槽讀取Serial->readAll()踩過的坑

修改的代碼如下:

QByteArray data;
data = Serial->readAll();//拿序列槽中的資料
temp.append(data);
if(temp.contains('\n'))//隻有等到\n的時候才能進入
{
		xxxx//
		temp.clear();
 }
           

這樣處理後拿到的資料是:如圖

QT序列槽讀取Serial->readAll()踩過的坑

坑二

單片機發送資料的時候需要加一個延時函數,不然還是會出現類似坑一的問題。

未完待續