QCustomPlot图像刷新原理

news2024/11/19 17:40:41

借用官方的这张图分析。
在这里插入图片描述
主要关注QCPLayer 和QCPLayout,几乎所有的元素都是放置同一张布局中的,布局是核心要素,不同的元素可能不在同一张layer ,即不在同一层,不在同一层的元素的区别就是上层的元素会挡住下层的元素,主要是因为不同层的刷新顺序有区别,具体看源码。

emit beforeReplot();

# if QT_VERSION < QT_VERSION_CHECK(4, 8, 0)
  QTime replotTimer;
  replotTimer.start();
# else
  QElapsedTimer replotTimer;
  replotTimer.start();
# endif

  updateLayout();//更新布局
  // draw all layered objects (grid, axes, plottables, items, legend,...) into their buffers:

  setupPaintBuffers();//准备绘画缓冲区
  foreach (QCPLayer *layer, mLayers)
    layer->drawToPaintBuffer();
  foreach (QSharedPointer<QCPAbstractPaintBuffer> buffer, mPaintBuffers)
    buffer->setInvalidated(false);

  if ((refreshPriority == rpRefreshHint && mPlottingHints.testFlag(QCP::phImmediateRefresh)) || refreshPriority==rpImmediateRefresh)
  {
    repaint();
  }
  else
  {
    update();
  }

# if QT_VERSION < QT_VERSION_CHECK(4, 8, 0)
  mReplotTime = replotTimer.elapsed();
# else
  mReplotTime = replotTimer.nsecsElapsed()*1e-6;
# endif
  if (!qFuzzyIsNull(mReplotTimeAverage))
    mReplotTimeAverage = mReplotTimeAverage*0.9 + mReplotTime*0.1; // exponential moving average with a time constant of 10 last replots
  else
    mReplotTimeAverage = mReplotTime; // no previous replots to average with, so initialize with replot time
  
  emit afterReplot();

主要看replot 函数中两个信号中间做的操作。在这里插入图片描述
这里进行一层一层的画图。
在这里插入图片描述
这个函数是获取画笔,然后画图。
在这里插入图片描述
继续查看draw函数,这个对每一层的cplayerable 进行画图,cplayerabale是一个父类,根据c++ 的多态特性,通过父类指针调用纯虚函数(这里指draw),可以执行子类的draw 函数。
在这里插入图片描述
又根据此图可以看出,所有控件都是继承与QCPlayerable,因此都会调用子类的draw函数进行绘画。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1155121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Xposed hook 抖音首页标签隐藏

Xposed hook 抖音首页标签隐藏 本篇文章主要使用xposed hook arraylist,来实现 抖音首页部分标签条目隐藏。 直接上代码&#xff1a; //隐藏首页tab XposedHelpers.findAndHookMethod(ArrayList.class, "add", Object.class, new XC_MethodHook() {Overrideprotect…

基于Docker安装Minikube

Minikube简介 Minikube是1款mini的Kubernetes集群&#xff0c;适合在本机上搭建Kubernetes环境进行测试。 Minikube的安装依赖于虚拟机或容器环境&#xff0c;类似于Kubernetes集群的安装依赖于公有云或私有云等。二者关系如下图所示&#xff1a; Minikube & dockerhttps…

MySQL创建数据库和创建数据表

二、创建数据库 1. 连接 MySQL 输入 mysql -u root -p 命令&#xff0c;回车&#xff0c;然后输入 MySQL 的密码(不要忘记了密码)&#xff0c;再回车&#xff0c;就连接上 MySQL 了。 mysql -u root -p 最初&#xff0c;都是使用 root 用户登录&#xff0c;工作中如果一直用…

uniapp开发微信小程序uview里的u-upload组件上传图片点击没反应,开发者工具点击正常,正式上手机上点击没反应

项目场景&#xff1a; 用uniapp开发的微信小程序&#xff0c;uview插件ui&#xff0c;u-upload上传文件&#xff0c;上传头像等方法&#xff0c;早就审核发布过的突然反应上传图片&#xff0c;文件啥的点击没反应 问题描述 原因分析&#xff1a; 根据查资料得知可能是因为小程…

第05章_排序与分

第05章_排序与分页 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC&#xff08;ascend&#xff09;: 升序DESC&#xff08;descend&…

乘法器:如何像搭乐高一样搭电路(下)?

目录 背景 顺序乘法的实现过程 并行加速方法 电路并行 小结 背景 和学习小学数学一样&#xff0c;学完了加法之后&#xff0c;我们自然而然就要来学习乘法。既然是退回到小学&#xff0c;我们就把问题搞得简单一点&#xff0c;先来看两个 4 位数的乘法。这里的 4 位数&am…

前后端分离vue+springboot家庭理财账单财务管理系统

项目介绍&#xff1a; 该系统能够管理家庭收入支出&#xff0c;并且能直观得表现收支状态。主要功能包括用户管理、收支管理、财务管理、统计收支情况等功能。 技术栈&#xff1a; 后端&#xff1a; SpringBoot&#xff0c;Sa-Token&#xff0c;MyBatis-Plus&#xff0c;MyB…

WS-*标准是什么,有什么作用

WS-*标准是一组基于SOAP协议的Web服务规范&#xff0c;目的是提供一种在分布式环境中实现可互操作的端到端服务的方式。这些标准通常由不同的组织和公司提出&#xff0c;并得到了业界广泛的支持和应用。WS-*标准涵盖了从消息传输、安全性、事务处理到服务描述等多个方面。 主要…

成集云 | 企业微信费用报销集成金蝶EAS | 解决方案

源系统成集云目标系统 ​ 编辑 方案介绍 企业微信是一款通讯与办公工具&#xff0c;具有与微信一致的沟通体验&#xff0c;丰富的OA应用&#xff0c;和连接微信生态的能力&#xff0c;可帮助企业连接内部、连接生态伙伴、连接消费者。 金蝶EAS是金蝶软件的一款产品&#xff…

蓝桥杯动态规划-第五弹 最大子数组和 买卖股票最佳时机IV 第N个泰波那契数 环形数组

目录 一、最大子数组和 二、买卖股票最佳时机IV 三、第N个泰波那契数 四、环形数组 一、最大子数组和 1.状态表示 dp[i]:到第i数字&#xff0c;所有的最大和。 2.状态转移方程 dp[i]max(dp[i-1]p[i]&#xff0c;p[i])(加入这个点是0&#xff09; 我们来想一下&#xff0c;这…

C++ 面向对象 学习 优秀教程

油管看视频 沉浸式翻译插件&#xff0c;实现中文字幕&#xff01; 文章目录 Object Oriented Programming (OOP) in C Course Object Oriented Programming (OOP) in C Course https://www.youtube.com/watch?vwN0x9eZLix4 博主&#xff1a;https://www.youtube.com/CodeBeau…

手把手教你如何实现TNAS与云盘之间的无缝同步技巧

嘿&#xff0c;铁粉们&#xff01; 云盘的下载速度总是让我们抓耳挠腮 数据安全隐私问题让人担心不已 但在购入NAS之前 众多数据存放在云盘里 同时也想把NAS的数据备份在云盘里 实现备份321法则&#xff1f; 不用烦恼 铁威马来帮忙 无需其他多余操作 只要下载CloudSyn…

小米电视播放win10视频 win10共享问题

解决的方法就是安装SMB1.0协议 重启就OK了

redis的分布式锁

分布式锁是一种用在分布式系统中实现同步和互斥访问的机制。 1、分布式锁概念 满足分布式系统或者集群模式下&#xff0c;多进程可见并且互斥的锁。 分布式锁的核心思想就是让分布式集群中的节点都适用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;就能锁住线程…

小程序如何导入配送账号

为了提高配送效率和用户体验&#xff0c;可以导入配送账号&#xff08;包括电子面单快递物流账号、同城外卖配送账号&#xff09;到小程序中。导入后&#xff0c;可以实现一键发货&#xff0c;无需手动回填单号。而且在小程序中可以查看到物流状态&#xff0c;对于同城配送&…

CVE-2017-12149漏洞复现

目录 一、hunter上搜索web.title”锐捷网络”或者搜索web.icon”9c21df9129aeec032df8ac15c84e050d”&#xff0c;搜索相关资产。 二、一个一个点击查看&#xff0c;若出现以下界面就是锐捷的EW1200G路由器。 三、随便输入一个密码&#xff0c;发现是登不进去的。 四、此时…

操作系统:内存管理(二)虚拟内存管理

一战成硕 3.2 虚拟内存管理3.2.1 虚拟内存的基本概念3.2.2 请求分页管理方式3.2.3 页框分配3.2.4 页面置换算法3.2.5 抖动和工作集 3.2 虚拟内存管理 3.2.1 虚拟内存的基本概念 3.2.2 请求分页管理方式 页表机制 缺页中断机制 地址变换机构 3.2.3 页框分配 驻留集大小 内…

2023年软件测试工具总结 —— 单元测试工具

在应用程序中&#xff0c;单元是具有一个或多个输入和单个输出的软件中最小可测试部分。单元测试是一种测试软件代码单元的方法&#xff0c;通常包括一个或两个输入&#xff0c;产生一个输出。单元测试主要关注独立模块的功能正确性&#xff0c;目的是确保每个单元都按照预期的…

linux(二)

内部命令和外部命令 什么是命令&#xff1a;用来实现某一种功能的指令或程序 命令的执行依赖于解释器(如/bin/bash 用的最多) &#xff0c;解释器存放于/erc/shells, shells就是解释器统称 管理员的权限 普通用户的权限 命令提示符 查看ls的绝对路径 解释器&#xff0c;存在于…

单体架构 vs 微服务架构的全面比较

软件架构是指软件系统的高层设计和组织方式。它定义了系统的结构、组件、它们之间的交互以及它们如何满足系统的需求。有各种软件架构模式&#xff0c;每种都有其自身的优点和权衡。两种常见的架构模式是微服务架构和单体架构。 单体架构&#xff1a; 单体架构是一种传统的方法…