QWidget::update () 和 QWidget::repaint () 用法和区别

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()中被积压的任务越来越多。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值