[問題] QSerialPort接受數據問題

看板C_and_CPP作者 (談無慾)時間7年前 (2017/04/19 15:40), 7年前編輯推噓0(003)
留言3則, 1人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) win7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) vs2015 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) qt 5.7 問題(Question): http://codepad.org/lpy6REnh 以上是我的code 我想對usb的東西送指令 使用的是 UART to USB 我用QSerialPort的SIGNAL(readyRead())去監聽回傳回來的東西 他可能分段傳回來 但我需要完整的一段 才有辦法解析 回傳可能長這樣 "\x06" "\x23" "\x4\x12\x85" "\x83\x86\xB0\x83\xEA" 但我需要知道他甚麼時候結束 才能作解析 "\x06\x23\x4\x12\x85\x83\x86\xB0\x83\xEA" <-再把這串拿去做解析 開頭跟結尾理論上會是固定的 \x06開頭 \xEA結尾 目前還是用btn去控制 但之後要用timer去掃SnedMsg()這個slot 請問有推薦的做法嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.242.6.98 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1492587653.A.0A4.html

04/19 16:43, , 1F
標準做法是自己做一層負責收資料的 controller, 收到
04/19 16:43, 1F

04/19 16:43, , 2F
0xea 的時候發一個 signal, 其他人接這個 signal 就好
04/19 16:43, 2F
所以是讀到的字串用QString AddStr 把他接起來 然後掃最後一位數是否為 \xEA 如果是的話 把這段往上傳 然後然後把AddStr清除? void Meter::portToRead() {//資料接收、打印 QString Rx; QString AddStr; Rx = serial->readAll(); AddStr += Rx; if (AddStr.right(4) == \xEa){ emit message(AddStr); AddStr = ""; } } 大概改成這種感覺? ※ 編輯: MOONY135 (210.242.6.98), 04/19/2017 16:52:42

04/19 18:06, , 3F
對概念上是這樣, 上面這段程式有 bug 你之後自己會發現
04/19 18:06, 3F
我知道 QString Rx; 要弄成全域變數 不過好像還是少了點甚麼 ※ 編輯: MOONY135 (36.225.55.127), 04/19/2017 20:28:52
文章代碼(AID): #1OznI52a (C_and_CPP)