求教QGraphicsItem调用update函数的原理

fairland122 2013-06-26 10:36:05
问题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函数 (估计是毫秒级别的时间段内)是不是场景只执行了一次重绘操作。

请大神帮小弟分析下。摆脱了

...全文
261 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
有点记不住了,可能会有点小偏差 1 item中的paint(Qpainter* painter, xxxx,xxxx); 这个painter是view中构建的 2 你调用item的update. 按照grphics system的设计思想,应该是所有可见这个item view需要重绘。 3 如果update是通过事件发送的话,不像是glwidget那种直接调用paint。 那么,Qt会帮你合并这个update事件。
彩阳 2013-06-28
  • 打赏
  • 举报
回复
1、查了一下,Qt5中QGraphicsView没有paint成员函数;看源码,应该是需要update的时候将item所在的矩形标记为脏,然后通过Scene - View - Viewport逐次调用update( rect )。 2、如果是directUpdate,那么在QGraphicsScene中可以立即调用QGraphicsView的相关函数进行重绘,否则会在所有item循环update后进行重绘。 想要了解更多可以下载一套Qt源代码研究看看。
fairland122 2013-06-27
  • 打赏
  • 举报
回复
不要沉 顶啊

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧