void QWidget::update () [slot]
此函数不会立即重新绘制;相反,当Qt返回主事件循环时,它会安排一个绘制事件进行处理。这允许Qt进行优化,以获得比调用repaint()更快的速度和更少的闪烁。
Qt通常在paintEvent()调用之前擦除小部件的区域。如果设置了Qt::WA_OpaquePaintEvent小部件属性,小部件负责用不透明颜色绘制其所有像素。除非禁用更新或隐藏小部件,否则更新小部件。多次调用update()通常只会导致一次paintEvent()调用。
See also repaint(), paintEvent(), setUpdatesEnabled(), and Analog Clock Example.
下面有它的三个重载函数
void QWidget::update ( int x, int y, int w, int h )
This version updates a rectangle (x, y, w, h) inside the widget.
此版本更新小部件内的矩形(x、y、w、h)。
void QWidget::update ( const QRect & rect )
This version updates a rectangle rect inside the widget.
此版本更新小部件内的矩形。
void QWidget::update ( const QRegion & rgn )
This version repaints a region rgn inside the widget.
此版本在小部件内重新绘制区域rgn。
————————————————————————————————
void QWidget::repaint () [slot]
如果需要立即重新绘制,例如在动画期间,建议仅使用repaint()。在几乎所有情况下,update()都更好,因为它允许Qt优化速度并最小化闪烁。
警告:如果在函数中调用repaint(),而函数本身可能从paintEvent()调用,则可能会得到无限递归。update()函数从不导致递归。通过立即调用paintEvent()直接重新绘制小部件,除非禁用更新或隐藏小部件。
See also update(), paintEvent(), and setUpdatesEnabled().
下面有它的三个重载函数
void QWidget::repaint ( int x, int y, int w, int h )
This version repaints a rectangle (x, y, w, h) inside the widget.
If w is negative, it is replaced with width() - x, and if h is negative, it is replaced width height() - y.
此版本在小部件内重新绘制矩形(x、y、w、h)。如果w为负,则替换为width()-x,如果h为负,则替换为width-height()-y。
void QWidget::repaint ( const QRect & rect )
This version repaints a rectangle rect inside the widget.
此版本在小部件内重新绘制矩形矩形。
void QWidget::repaint ( const QRegion & rgn )
This version repaints a region rgn inside the widget.
此版本在小部件内重新绘制区域rgn。
关键区别
repaint()是立即调用paintEvent(),而update()不会立刻调用,是几次执行才调用一次paintEvent()。这样update()会造成这样的结果:paintEvent()中的任务没有执行完,就又被update().paintEvent()中被积压的任务越来越多。