repaint与update区别

序言

这个起初只是了解到这两个函数对界面实现了刷新,然后具体更细节方面的就没多多接触了解,直到我遇到了一个问题,就是断线之后弹出框先显示倒计时,然后连上网络之后弹出框隐藏,再次去测试短线问题然后发现一直会先显示上次的倒计时,然后恢复到设置的默认的倒计时值。
我尝试过在隐藏后清空label上的字,甚至添加了一定延时也没有解决问题,然后想起可能是在隐藏的时候还没来得及去刷新界面导致所致,然后我在隐藏的时候去设置了update,然后发现没有多大效果,发现paint()事件中没有更新显示字符的label。

解决方案:

  1. 就是将下次显示的数据之前将label 清空一下(这个clear不要在窗口hide时操作)。
  2. 可以在hide之前实现clear后,然后将label repaint下。

区别:
repaint()
通过立即调用paintEvent()直接重新绘制小部件,除非禁用了更新或隐藏了小部件。

我们建议只在需要立即重绘时使用repaint(),例如在动画期间。在几乎所有情况下,update()都更好,因为它允许Qt优化速度和最小化闪烁。

update()

更新小部件,除非禁用了更新或隐藏了小部件。

此函数不会导致立即重绘;相反,当Qt返回到主事件循环时,它为处理调度一个paint事件。这允许Qt进行优化,以获得比调用repaint()更快的速度和更少的闪烁。

多次调用update()通常只会导致一次paintEvent()调用。

Qt通常在paintEvent()调用之前擦除小部件的区域。如果设置了Qt::WA_OpaquePaintEvent小部件属性,小部件将负责用不透明的颜色绘制其所有像素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道阻且长,行则降至

无聊,打赏求刺激而已

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值