Qt | 关于重绘事件处理函数 paintEvent()
前言:
QWidget 提供的 paintEvent()函数是一个纯虚函数,继承它的子类想进行重绘时必须重新实现这个函数。
引发重绘事件的情况:
当窗口控件第一次显示时,系统会自动产生一个绘图事件。
repaint()与 update()函数被调用时。
当窗口控件被其他部件遮挡,然后又显示出来时,会对隐藏的区域产生一个重绘事件。
重新调整窗口大小时。
paintEvent()函数是已经被高度优化过的函数,本身已经自动开启并实现了双缓冲机制,因此在 Qt 中重绘操作不会引起屏幕上的任何闪烁现象。
repaint()函数:
repaint()是最快引起重绘操作的,紧急情况下需要立刻重绘的时候可以调用 repaint()。
但是 repaint()不能放到 paintEvent()函数里面调用,或造成死循环。
update()函数:
update()调用之后不会立即重绘,而是将重绘事件放入主循环中,由 main()主函数的事件循环(Event Loop)统一调度。
update()在调用 paintEvent()之前做了优化,如果 update()被调用了很多次,最后这些 update()会合并到一个大的重绘事件,并加入到消息队列,最后只有这个大的 update()被执行一次。
repaint()和 update()相比,一般情况下调用 update()就够了,当 update()不能满足需求时,再尝试使用 repaint()。
在 paintEvent()中实现绘图操作:
绘图常用的工具有画笔类 QPen、画刷类 QBrush 和字体类 QFont 等,它们都继承自 QPainter 类。
QPainter 可以绘制各种基础图形。
QPen 类用于绘制几何图形的边缘,由颜色、宽度、线条风格等参数组成。
QBrush 类是用于填充几何图形的调色板,由颜色和填充风格组成。
QFont 类用于文本绘制,由字体属性组成。
例:
其他具体用法还可以参考帮助手册查看。
版权声明: 本文为 InfoQ 作者【YOLO.】的原创文章。
原文链接:【http://xie.infoq.cn/article/0d30a858bd75f4854fdcc7dcb】。未经作者许可,禁止转载。
评论