Qt界面刷新优化的一些心得
【背景】一个类似Windows任务管理器的性能界面。该界面有多个曲线图同时定时刷新,每个曲线图包括多条曲线更新,数据更新频率大概为一秒一次。程序中曲线图已封装为自定义的图表类,给出数据更新接口。
【初始方案】主程序设计方案上,采用数据收集和数据更新分开的方式,即数据收集线程仅收集并解析来自数据源的数据,并分门别类的存储到共享结构体中。数据更新线程在收到数据更新信号之后,把新的数据刷新到图表中。
【存在问题】数据刷新时,鼠标拖拽主界面移动时存在停顿,且停顿频率与数据刷新频率相当。尤其是当数据量较大或更新频率加快时,停顿效果更新严重。
【问题分析】经调试发现,虽然数据收集线程在对数据收集后已完成数据的解析工作,并将整理好的数据推送给更新线程。但在曲线图更新的过程中,曲线图实例需要从已有曲线的数据拉取出来,删除存在时间最早的数据,再将新的数据更新到已有数据中。这一过程对于单个曲线图同时存在多条曲线的更新时耗时较长,尤其对于主界面同时存在多个曲线图的情况时,更甚。由此导致数据在刷新过程中存在较大程度的延时情况,从主界面的使用情况看,即鼠标拖拽时,出现停顿甚至是程序未响应的发生。
【解决方法】数据收集线程在整理完数据后,将数据通过图表实例的更新接口给入,该接口从对已有的数据进行更新,并保存在实例成员中,但不做刷新处理。在数据收集线程做完本次数据收集和整理过程之后,通过信号量通知更新线程。更新线程获得信号后,调用图表实例的刷新接口,刷新接口将已准备好的数据直接更新到界面中,不再处理其数据,如此一来,在动态更新曲线的过程中,鼠标拖拽不再出现停顿或程序停止运行的情况。
上述过程,可从Demo代码中下载,通过配置其中的 USING_QTIMER 或 USING_STD_THREAD 调用不同的处理方案(注意,demo使用了Qt的QChart,使用QtCreater需安装相应的模块,Demo中的数据处理过程以延迟模拟)
Qt界面刷新优化的一些心得相关推荐
- Qt 界面加载卡顿或刷新问题
主要有以下几个解决方案可以去尝试下: 一.设置WA_Mapped属性 // 让界面可以及时更新 void CMainStaticsWindows::showEvent(QShowEvent *even ...
- Qt界面优化:鼠标双击特效
Qt界面优化:鼠标双击特效 文章目录 Qt界面优化:鼠标双击特效 一.双击特效 二.使用步骤 1. .h部分 2. .cpp部分 注意点 gif动图的背景必须是透明的!!! 总结 一.双击特效 二.使 ...
- Qt界面优化:Qt窗体控件设置
Qt界面优化:Qt窗体控件设置 文章目录 Qt界面优化:Qt窗体控件设置 一.效果图 1.鼠标移动点击效果 2. Qt托盘效果 二.使用步骤 1. 背景图片的添加 2. 控件样式的更改 3. Qt窗体 ...
- Qt界面优化:Qt去边框与窗体圆角化
Qt界面优化:Qt去边框与窗体圆角化 文章目录 Qt界面优化:Qt去边框与窗体圆角化 一.效果图 二.使用步骤 1. .h部分 2. .cpp部分 总结 一.效果图 二.使用步骤 1. .h部分 代码 ...
- QT界面中实现视频帧显示的多种方法及应用
QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...
- Android:一个线程玩转商品列表所有item的倒计时器,并对Adapter进行单控件刷新优化...
所以这次我还是会跟大家讲一下关于商城的一个需求------商品的倒计时器. 或者有人会说,商品的一个倒计时很简单,但是我这次的需求是一个商品列表,每个商品都需要有一个自己的计时器.首先我们看看需求效果 ...
- 基于嵌入式QT界面GPS定位系统设计与实现
目 录 第1章 绪论- -1 1.1 选题背景和意义- - .1 1.2 主要研究内容- - -1 第2章 GPS系统基础知识介绍- - - -2 2.1 GPS 定位的坐标系统- - - -2 2. ...
- QT界面简单的图形移动和鼠标绘图
QT界面图形移动及鼠标绘图 0.首先头文件: #include <QPainter> #include <QMouseEvent> #include <QKeyEvent ...
- halcon与QT联合:(5.1)瓶盖检测以及QT界面搭建
halcon实现瓶盖检测与定位代码: dev_close_window() dev_open_window(0, 0, 1024, 1024, 'black', WindowHandle) list_ ...
- Winform开发的界面处理优化
在Winform开发中,客户体验是个很好的参考性指标,如果一个功能使用的时候感觉很流畅,说明我们的程序执行效率还不错,但是随着数据的真多,原先可能流程的地方可能会变得比较卡,这时候就需要追本索源,找到 ...
最新文章
- Java入门之HelloWorld
- vue实例、指令、生命周期
- 大数据学习系列----基于Spark Streaming流式计算
- Topic model相关文章总结
- 华为怒发公开信;锤子手机难产罗永浩陷尴尬处境;苹果错失 5G | 极客头条
- 1064. 朋友数(20)-PAT乙级真题
- 文件管理浏览器组件支持doc、excel、ppt、txt格式文件的预览和编辑,支持ofd、pdf文件的预览。
- 复盘:企业微信中国发展简史
- 快手、抖音等短视频营销模式
- 部门平均工资mysql_按部门统计各工资级别的人数、平均工资。
- 最新Hive/Hadoop高频面试点小集合
- 2016年11月30日 angularJS input=file 绑定change事件
- 系统架构中概念总结二
- python 存储字典_python 字典存储
- Ubuntu下使用ROS moveit 连接ABB机器人
- eeglab的安装和安装时遇到的问题
- 一行代码让Python的运行速度提高100倍
- 恋物志(一):网红带货,宠主追捧,2021年宠物智能硬件会火吗?
- html5卤虾,自制五香小龙虾,自己做干净卫生,香辣可口,太过瘾了
- d3 svg path添加文本_D3.js 力导向图的显示优化