paintEvent()重绘事件
2015-11-30 16:06
225 查看
Qt Creator快速入门
一个重绘事件用来重绘一个部件的全部或者部分区域,下面几个原因的任意一个都会发生重绘事件:
(1)repaint()函数或者update()函数被调用;
(2)被隐藏的部件现在被重新显示;
(3)其他一些原因。
大部分部件可以简单地重绘它们的全部界面,但是一些绘制比较慢的部件需要进行优化而只绘制需要的区域(可以使用QPaintEvent::region()来获取该区域),这种速度上的优化不会影响结果。Qt也会通过合并多个重绘事件为一个事件来加快绘制,当update()函数被调用多次,或者窗口系统发送了多个重绘事件,那么Qt就会合并这些事件成为一个事件,而这个事件拥有最大的需要重绘的区域。update()函数不会立即进行重绘,要等到Qt返回主事件循环后才会进行,所以多次调用update()函数一般只会引起一次paintEvent()函数调用。而调用repaint()函数会立即调用paintEvent()函数来重绘部件,只有在必须立即进行重绘操作的情况下(比如在动画中),才使用repaint()函数。update()函数允许Qt优化速度和减少闪烁,但是repaint()函数不支持这样的优化,所以建议一般情况下尽可能使用update()函数。还要说明一下,在程序开始运行时就会自动发送重绘事件而调用paintEvent()函数,另外,不要在paintEvent()函数中调用update()或者repaint()函数。
当重绘事件发生时,要更新的区域一般会被擦除,然后在部件的背景上进行绘制。
一个重绘事件用来重绘一个部件的全部或者部分区域,下面几个原因的任意一个都会发生重绘事件:
(1)repaint()函数或者update()函数被调用;
(2)被隐藏的部件现在被重新显示;
(3)其他一些原因。
大部分部件可以简单地重绘它们的全部界面,但是一些绘制比较慢的部件需要进行优化而只绘制需要的区域(可以使用QPaintEvent::region()来获取该区域),这种速度上的优化不会影响结果。Qt也会通过合并多个重绘事件为一个事件来加快绘制,当update()函数被调用多次,或者窗口系统发送了多个重绘事件,那么Qt就会合并这些事件成为一个事件,而这个事件拥有最大的需要重绘的区域。update()函数不会立即进行重绘,要等到Qt返回主事件循环后才会进行,所以多次调用update()函数一般只会引起一次paintEvent()函数调用。而调用repaint()函数会立即调用paintEvent()函数来重绘部件,只有在必须立即进行重绘操作的情况下(比如在动画中),才使用repaint()函数。update()函数允许Qt优化速度和减少闪烁,但是repaint()函数不支持这样的优化,所以建议一般情况下尽可能使用update()函数。还要说明一下,在程序开始运行时就会自动发送重绘事件而调用paintEvent()函数,另外,不要在paintEvent()函数中调用update()或者repaint()函数。
当重绘事件发生时,要更新的区域一般会被擦除,然后在部件的背景上进行绘制。
相关文章推荐
- 警告:Block的Retain Cycle的解决方法
- IPC-Binder连接池
- 【索引】2015 Multi-University Training Contest
- HTML5 Canvas渐进填充与透明(摘自 http://blog.csdn.net/jia20003/article/details/9251893)
- ping失败,如果在路由表main内没有entry
- Idea创建main函数
- Daily Scrum - 11/30
- 初探glusterfs-处理脑裂(split-brain)状态
- Failed to call ScheduleShutdown in logind, proceeding with immediate shutdown: Access denied
- IMAGE INPAINTING
- 光纤网卡、HBA卡和RAID卡的区别
- 社交媒体中的谣言检测(A11, AAAI2015)
- Container With Most Water
- airodump-ng wlan0mon doesn't work
- RAID基本知识
- Contains Duplicate II
- ITerrainPolygon应用
- CombinedDomainXYPlot
- setContentView(R.layout.activity_main) Error解决方法 .
- Contains Duplicate