Qt写的串口调试助手实时处理并显示数据

lenvwe 2017-08-15 08:09:01
用Qt5.9.0自带的串口类写了一个通过串口接收数据的程序,可以将串口接收的数据显示出来。现在想对程序进行改进。
比如,板子一直发数据,其中部分是“abc\n23.98e\n123w\n”,我的想法是根据“\n”区别出各个字符串,然后分别送给3个TextBrowser显示,比如abc在TextBrowser1显示,23.98e在TextBrowser2显示,123w在TextBrowser3显示,依此类推。要实现对数据的实时处理并显示,需要用到线程吗?如果用到,大致思路是什么?本人小白,恳请大神回复。
...全文
1235 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lenvwe 2017-08-16
  • 打赏
  • 举报
回复
谢谢回复,你的大概意思是将数据存入FIFO缓冲区,用单独的线程处理这些数据,处理之后传递给窗口显示, 但是我还有些问题: 1.FIFO缓冲区在Qt中如何实现?是有特定的类可以用还是根据原理自己写?我看网上有人用QBuffer实现http://qimo601.lofter.com/post/b3b78_6c483a1,在Qt的帮助文档里QQueue提到了FIFO,我想问一下这两者有什么区别? 2.你说的”用事件方式接收“是什么意思?还有其他方式吗?这里事件方式是只针对Qt的,还是FIFO本身的属性? 3.线程处理数据后,处理过的数据是还在FIFO缓冲区里还是已经取走显示了?
  • 打赏
  • 举报
回复
使用qlist或者qqueue就可实现数据的先进先出。 1.启动一个线程用于接收数据,接收到的数据往qlist或者qqueue尾部扔。 2.启动另一个线程,不断的从qlist或者qqueue的头部取出字符串,进行分析处理,将处理完的数据通过信号分别发射到主线程的3个TextBrowser显示。 这2个线程使用过程中需要使用互斥量保护一下qlist或者qqueue的数据。
Acuity. 2017-08-15
  • 打赏
  • 举报
回复
1、增加一个FIFO环形缓冲区,用事件方式接收,先把所有数据存放在环形缓冲区,如果速率快且数据量大,缓冲区需要设置大一点,一般4K足够; 2、开一个线程,用于读取缓冲区数据并解析数据,解析完传递给窗口线程或者其他线程;可以增加使用一个信号量,串口有数据接收时才执行线程,无数据时挂起线程。

16,818

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧