[問題] 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