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
相关产品推荐
相关产品推荐

