QGraphicsItem调用update函数的原理

探讨QGraphicsItem更新与重绘机制
本文深入解析Qt中QGraphicsItem的update()函数触发的重绘过程,包括QGraphicsView和QGraphicsItem的paint()函数的交互,特别关注在短时间内多次调用update()函数时的场景处理及效率优化。
问题1:假如在一个场景中有多个QGraphicsItem(例如a,b,c,d,e,f,g),调用其中一个QGraphicsItem (例如a)中的 update()函数。 是不是 执行了a 所在的 QGraphicsView 中的paint函数 和 所有界面能显示出来的QGraphicsItem(例如 a,b,c,d能看到 e,f,g不能看到) 中的paint()函数。

问题2:当多个QGraphicsItem 在很短的时间内调用update函数 (估计是毫秒级别的时间段内)是不是场景只执行了一次重绘操作。



1、查了一下,Qt5中QGraphicsView没有paint成员函数;看源码,应该是需要update的时候将item所在的矩形标记为脏,然后通过Scene - View - Viewport逐次调用update( rect )。
2、如果是directUpdate,那么在QGraphicsScene中可以立即调用QGraphicsView的相关函数进行重绘,否则会在所有item循环update后进行重绘。

有点记不住了,可能会有点小偏差
1 item中的paint(Qpainter* painter, xxxx,xxxx);
这个painter是view中构建的
2 你调用item的update.
按照grphics system的设计思想,应该是所有可见这个item view需要重绘。
3 如果update是通过事件发送的话,不像是glwidget那种直接调用paint。
那么,Qt会帮你合并这个update事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值