You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt QProgressBar隐藏文本时无法定期更新的问题排查

QProgressBar隐藏文本后更新滞后的原因与解决办法

你遇到的不是Qt的Bug,而是Qt针对无文本进度条做的绘制优化。

当QProgressBar设置setTextVisible(False)后,Qt会默认减少重绘频率——因为没有进度文本需要同步更新,它认为小幅度的进度变化没必要立刻重绘填充区域,只会在进度累积到一定比例(大概5%-10%)时才触发一次重绘,这就导致了进度条看起来滞后。这种优化在PyQt5、Qt 5.15.2以及Qt 6.4.1的C++版本中都存在,是跨版本的统一行为。

解决办法

最简单的方式是每次设置进度值后,手动触发进度条的重绘,强制Qt立即更新界面:

修改你的updateProgress方法,在设置progressBar1的值后调用repaint():

def updateProgress(self):
    self.progress = (self.progress+1) % 100
    self.progressBar1.setValue(self.progress)
    self.progressBar1.repaint()  # 强制立即重绘
    self.progressBar2.setValue(self.progress)
    QtCore.QTimer.singleShot(1000, self.updateProgress)

这样隐藏文本的进度条就会和显示文本的进度条保持同步更新了。

如果需要更精细的控制,也可以自定义QProgressBar子类,重写paintEvent方法完全掌控绘制逻辑,但对于大多数场景来说,手动调用repaint()已经足够解决问题。

内容的提问来源于stack exchange,提问作者Andre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:25:41