update()和repaint()的区别

58 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情

前提要点

paintEvent()这个虚函数是update()和repaint()这两个函数的重要连接,paintEvent主要是应用在界面的绘制,在大多数的情况下他会被其他函数自动调用。这里的其他函数就包括update()和repaint()这两个函数。由于他是一个虚函数,所以他的子类会对他的父类进行重写操作。

 

Repaint

Repaint 它的特点在于调用了repaint()函数以后会立马调用paintEvent函数,它适用于紧急情况下需要立马重绘的时候。但是要注意的是他不能嵌套在paintEvent函数中,会造成死循环。因此此函数不建议经常使用。

使用方法: voidQWidget::repaint ( int x, int y, int w, int h, bool erase = TRUE )

如果erase 为true ,Qt 在paintEvent()调用之前擦除区域

折柳需要注意的是:w h 如果为负值 宽度会用实际的宽度-x

高度会用实际的高度-y

 

Update

Update它的特点在于调用了Update()函数以后不会立马调用paintEvent函数,他会把重绘的信息放在主消息的循环之中,并且他在调用重回函数之前对他做了优化,如果多次调用Update函数,在最后执行的时候他只会执行一次,不回多次重复执行导致界面闪烁。他也可以避免了Repaint函数造成死循环的情况。更不会导致任务积累。

update ( int x, int y, int w, int h )

他可以对小部件内的举行进行重载 这里的四个参数也可以用QRect & rect直接使用

只需要直接输入他的位置,不需要在确定每个参数具体值。

QRect == int x, int y, int w, int h

QRect他代表一个矩形的坐标位置及其大小。

注意:

如果控件的状态是被隐藏或者此控件的刷新已经被禁用,会直接返回;

如果参数所传递的矩形和空间的矩形的各个参数交集为空,也会直接返回。