当前位置: 首页 > news >正文

QGraphicsView放大时,paint有时不被调用,导致图像绘制不出来(2)

此前(1)解决的是在QGraphicsItem::boundingRect不变的情况下造成不绘制。这次解决的是QGraphicsItem::boundingRect随时都发生变化导致的不绘制。
这问题是我在不继承QGraphicsLineItem(调用setLine),而是继承QGraphicsItem时,绘制曲线导致的。通过调试,发现boundingRect并不是每次绘制都会调用,所以当我们改变了QGraphicsItem::boundingRect时,需要场景(scene)调用该item的boundingRect来获取到新的区域,以便判断该QGraphicsItem是不是在QGraphicsView的可视范围内,从而觉得需不需要调用QGraphicsItem::paint来绘制。

解决方式:在item改变boundingRect的地方调用prepareGeometryChange()。

由于我绘制的曲线item是根据两个QGraphicsItem的坐标去绘制的,所以我在重新计算曲线item有效范围(改变boundingRect)的函数末尾加了prepareGeometryChange()。

下图就是没加prepareGeometryChange的情况。当QGraphicsView放大时,部分曲线消失了,甚至一块有一块没。缩放回去又出现了。
正常情况:
在这里插入图片描述
放大部分曲线消失:
在这里插入图片描述
放大调整视图时,曲线不完整:
在这里插入图片描述

http://www.lryc.cn/news/126300.html

相关文章:

  • 深入理解设计模式-创建型之建造者模式(与工厂区别)
  • Centos7多台服务器免密登录
  • C语言实现哈希搜索算法
  • MySQL卸载并重装指定版本
  • 文件IO编程 1 2
  • Java后端框架模块整合
  • 17 synchronized关键字使用 synchronized方法、synchronized块
  • django-基本环境配置
  • Springboot 实践(4)swagger-ui 测试controller
  • PHP实践:分布式场景下的Session共享解决方案实现
  • 07 - 查看、创建、切换和删除分支
  • 【SpringBoot】89、SpringBoot中使用@Transactional进行事务管理
  • 两天入门Linux、搭建Spring环境 第一天
  • OpenCV实例(九)基于深度学习的运动目标检测(一)YOLO运动目标检测算法
  • CI/CD流水线实战
  • 详解配置交换机多生成树MSTP+VRRP 的典型组网
  • 二.net core 自动化发布到docker (Jenkins安装之后向导)
  • 【设计模式——学习笔记】23种设计模式——解释器模式Interpreter(原理讲解+应用场景介绍+案例介绍+Java代码实现)
  • 【计算机网络】——数据链路层
  • 数据结构:栈和队列(超详细)
  • AI项目二:基于mediapipe的虚拟鼠标控制
  • EVE-NG 隐藏没有镜像的模板
  • 机器学习理论笔记(一):初识机器学习
  • Programming abstractions in C阅读笔记: p114-p117
  • 分布式应用:Zabbix监控Tomcat
  • 《起风了》C++源代码
  • Grafana展示k8s中pod的jvm监控面板/actuator/prometheus
  • 实例038 设置窗体在屏幕中的位置
  • 合成数据及其在AI领域中的作用
  • Java内存区域(运行时数据区域)和内存模型(JMM)