《QT从基础到进阶·二十二》QGraphicsView显示大量图形项item导致界面卡顿的解决办法

news2024/11/15 7:17:32

有时候因业务需要,paint函数在界面上绘制了成百上千个图形项Items,导致操作界面的时候有明显的卡顿感,下文会提供一种比较好的解决办法,先来了解下QGraphicsItem的缓存方式。

1setCacheMode(QGraphicsItem::NoCache);  //默认方式,无缓存,实时进入paint刷新重绘2setCacheMode(QGraphicsItem::CacheBackground); //只缓存背景(背景色或背景图片),前景仍然需要重新计算。3setCacheMode(QGraphicsItem::DeviceCoordinateCache); //将整个项缓存在设备坐标系中,并且只有在位置、大小或外观发生变化时才需要重新计算。这是最常用和最有效的缓存模式(项目较少使用旋转、缩放、剪切)4setCacheMode(QGraphicsItem::ItemCoordinateCache );  //项目较多使用旋转,缩放,剪切等功能,但图形呈现质量较差。

在Item调用方式3或者直接在item构造中设置方式3能有效避免界面卡顿问题,如果图形项涉及大量的旋转,缩放,剪切,则方式3效果会和方式1差不多,基本没啥效果,界面依旧卡顿,这时就应该用方式4。

请注意,在某些情况下使用缓存可能会导致问题。例如,如果您的项的位置或大小经常更改,则需要清除该项的缓存以确保正确性。可以通过调用invalidate()函数来清除该项的缓存:

item->setPos(0, 0); //修改位置
item->invalidate(); //清除缓存

总结:
如果你的 QGraphicsItem::paint 操作过于复杂,并且大部分是静态的,那么尝试启用缓存.如果您没有对项目或 ItemCoordinateCache 应用转换(如旋转),请使用 DeviceCoordinateCache.避免经常调用 QGraphicsItem::update() ,否则它会比没有缓存更慢。如果您需要更改项目中的某些内容,两个选项是:在子项中绘制它,或使用 QGraphicsView::drawForeground()前景层。

在这里插入图片描述

📢博客主页: 主页
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 梦回阑珊 原创,首发于 CSDN,转载注明出处🙉
📢代码改变世界,你来改变代码!✨

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

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

相关文章

0基础学习PyFlink——水位线(watermark)触发计算

在《0基础学习PyFlink——个数滚动窗口(Tumbling Count Windows)》和《0基础学习PyFlink——个数滑动窗口(Sliding Count Windows)》中,我们发现如果窗口中元素个数没有把窗口填满,则不会触发计算。 为了解决长期不计算的问题&a…

日志及其框架

日志技术的概述 日志 生活中的日志: 生活中的日志就好比日记,可以记录你生活的点点滴滴。 程序中的日志: 程序中的日志可以用来记录程序运行过程中的信息,并可以进行永久存储。 以前记录日志的方式(输出语句&#…

设置专属链接的这些作用你知道吗?

专属链接作为一种个性化的链接,用于为特定的客户或群体提供定制化的体验或服务。对于企业来说,每个渠道或者每个客户都能拥有一个专属链接是无比便利的事情。企业可以将这个链接嵌入到各种宣传物料中,让客户通过输入链接即可进入与客服的交流…

thinkphp5 连接多个服务器数据库

如果你的database.php 是这样, 这是默认的db连接配置 如果还想连接其他服务器,或数据库 在config.php中追加数据库配置, 在使用的地方调用: use think\Db;public function test(){$db3Db::connect(config(db3));$result $db3…

使用Python的requests库模拟爬取地图商铺信息

目录 引言 一、了解目标网站 二、安装requests库 三、发送GET请求 四、解析响应内容 五、处理异常和数据清洗 六、数据存储和分析 七、数据分析和可视化 八、注意事项和最佳实践 总结 引言 随着互联网的快速发展,网络爬虫技术已经成为获取数据的重要手段…

Leetcode-104 二叉树的最大深度

递归实现 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

谈谈steam游戏搬砖的收益与风险,以及注意事项

11月CSGO市场行情分析,是否到了该抄底的时候了? 今天,要跟大家分享的Steam平台——全球最大的游戏平台,现在给大家介绍下steam搬砖项目,这个项目既小众又稳定。 先了解一下 steam这个平台是做什么的,steam…

navicat创建MySql定时任务

navicat创建MySql定时任务 前提 需要root用户权限 需要开启定时任务 1、开启定时任务 1.1 查看定时任务是否开启 mysql> show variables like event_scheduler;1.2 临时开启定时任务(下次重启后失效) set global event_scheduler on;1.3 设置永久开启定时任务 查看my…

c语言-数据结构-带头双向循环链表

目录 1、双向循环链表的结构 2、双向循环链表的结构体创建 3、双向循环链表的初始化 3.1 双向链表的打印 4、双向循环链表的头插 5、双向循环链表的尾插 6、双向循环链表的删除 6.1 尾删 6.2 头删 6.3 小节结论 7、查找 8、在pos位置前插入数据 9、删除pos位…

Scala---介绍及安装使用

一、Scala介绍 1. 为什么学习Scala语言 Scala是基于JVM的语言,与java语言类似,Java语言是基于JVM的面向对象的语言。Scala也是基于JVM,同时支持面向对象和面向函数的编程语言。这里学习Scala语言的原因是后期我们会学习一个优秀的计算框架S…

单链表(7)

插入函数——插入数据,在链表plist的pos位置插入val数据元素 由图知,poslength时,是可以插入的 在大多数情况下,说位置的时候,从0开始计数;说第几个数据的时候,从1开始计数 现在来测试一下 这就…

CSDN的规范、检测文章质量、博客等级好处等等(我也是意外发现的,我相信很多人还不知道,使用分享给大家!)

前言 都是整理官方的文档,方便自己查看和检查使用,以前我也不知道。后来巧合下发现的,所以分享给大家! 下面都有官方的链接,详情去看官方的文档。 大家严格按照官方的规范去记录自己工作生活中的文章,很快…

MacOS Ventura 13 优化配置(ARM架构新手向导)

一、系统配置 1、About My MacBook Pro 2、在当前标签打开新窗口 桌面上创建目录的文件夹,每次新打开一个目录,就会创建一个窗口,这就造成窗口太多,不太好查看和管理,我们可以改成在新标签处打开新目录。需要在&…

电动自动换刀高速电主轴的技术优势浅析

在制造业中,自动化技术的发展一直是一个重要的话题。其中,电动自动换刀被认为是一项高效、智能、先进的技术,在高速电主轴中使用电动自动换刀这一技术,不仅能够缩短换刀时间,还能减少换刀失误,本文将探讨Sy…

光计算1周2篇Nature,英伟达的时代彻底结束!

近期,光计算领域连续发出重量级文章,刊登在学术界的顶级期刊上。一时间,各大媒体纷纷转发,读者们也纷纷感叹:中国芯片取代英伟达的机会来了!今天,光子盒用这篇万字长文为大家梳理光计算的背景、…

指标类型(一):北极星指标、虚荣指标

每个产品都有很多指标,每个指标都反映了对应业务的经营情况。但是在实际业务经营中,却要求我们在不同的产品阶段寻找到合适的指标,让这个指标可以代表当前产品阶段的方向和目标,让这个指标不仅对业务经营团队,而且对产…

双十一网络电视盒子哪个品牌好?内行分享权威电视盒子排行榜

双十一大促正如火如荼进行中,因为我从事的工作和电视盒子有关,身边的朋友们在选购电视盒子时不知道从何下手就会问我的意见,本期将盘点业内公认的电视盒子排行榜,给双十一想买电视盒子的朋友们做个参考。 排行一:泰捷W…

【C++】非类型模板参数 | array容器 | 模板特化 | 模板为什么不能分离编译

目录 一、非类型模板参数 二、array容器 三、模板特化 为什么要对模板进行特化 函数模板特化 补充一个问题 类模板特化 全特化与偏特化 全特化 偏特化 四、模板为什么不能分离编译 为什么 怎么办 五、总结模板的优缺点 一、非类型模板参数 模板参数分两类&#x…

MVVM框架:图片加载有问题

一、前言:在我使用ImageView加载图片的时候添加如下代码发现报错 app:imageUrl"{viewModel.observableField.assetImg}"报错如下错误 二、原因:是啥我不太清楚好像是没有imageView的适配器,后来我看了一下确实没有 public class I…

Java中所有的运算符,以及运算符优先级(总结)

运算法是一种特殊的符号,用于表示数据的运算、复制、比较等。 1、算数运算符 // % 取余运算:结果的符号和被模数的符号一致 12 % 5 2 -12 % 5 -2 12 % -5 2 -12 % -5 -2int a1 10; int b1 a1; // a111, b111 int a2 10; int b2 a2; // a211, …