[问题] QT 即时显示资料

楼主: soso7885 (YOHO)   2016-01-09 01:31:37
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux C+
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
QT 5
问题(Question):
各位好,小弟我日前用QSerialPort写了一个读&写10次资料的程式,预期在textbox上即
时显示这是round第几次,但只会在第10round做完之后跳出循环才会显示这是第10round(
意思是直接从0跳到10),我想是不是必须用QThread一个跑serial read-write另一个upda
te mainwindow呢?还是直接在循环内读写完一次直接用connect-slot做就好? 烦请各位
给点意见,谢谢
预期的正确结果(Expected Output):
第一次做完显示round 1->第二次做完显示round 2->......->第10次做完显示round 10
错误结果(Wrong Output):
round 1 ->卡住等10次做完-> round 10
程式码(Code):(请善用置底文网页, 记得排版)
补充说明(Supplement):
手机发文 请见谅
作者: Bencrie   2016-01-09 01:34:00
UI 的本质就是个循环。让这个循环卡在处理某个东西就等于让 UI 卡住,因为他没办法继续收事件、执行对应的动作。开 work thread 想法是对的,至于从 thread 送 event 给UI 要查一下有没有对应的 API 帮你处理同步问题Android 的话就会是 handler
作者: WYchuang (爱赖床的黄金猎犬)   2016-01-09 02:47:00
QSerialPort有event driven, 有资料会用signal通知除非你系统很慢 不然在Slot里面收资料应该还可以接受
作者: bdvstg (bdvstg)   2016-01-09 05:12:00
QCoreApplication::processEvents(); 加在循环内试试https://goo.gl/q9ODIR 官方论坛讨论串
楼主: soso7885 (YOHO)   2016-01-09 11:35:00
谢谢楼上的各位,我试试看
作者: fanntone (我是胖子)   2016-01-10 01:42:00
建议用C++11 lambda然后自订callback去作

Links booklink

Contact Us: admin [ a t ] ucptt.com