作者MOONY135 (谈无慾)
看板C_and_CPP
标题[问题] QSerialPort接受数据问题
时间Wed Apr 19 15:40:50 2017
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1492587653.A.0A4.html
1F:→ uranusjr: 标准做法是自己做一层负责收资料的 controller, 收到 04/19 16:43
2F:→ uranusjr: 0xea 的时候发一个 signal, 其他人接这个 signal 就好 04/19 16:43
所以是读到的字串用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
3F:→ uranusjr: 对概念上是这样, 上面这段程式有 bug 你之後自己会发现 04/19 18:06
我知道 QString Rx; 要弄成全域变数
不过好像还是少了点甚麽
※ 编辑: MOONY135 (36.225.55.127), 04/19/2017 20:28:52