I'm having an odd problem with a label not being redrawn correctly when the text is changed, when it's inside a QHBoxLayout
with an added stretch.
Consider the following (PyQt) example code:
from PyQt5.QtWidgets import QApplication, QHBoxLayout, QWidget, QLabel
from PyQt5.QtCore import QTimer
def clearlabel():
print("clearing")
lbl.setText("")
lbl2.setText("")
app = QApplication([])
# Widget 1: with stretch
w = QWidget()
w.move(0, 0)
w.resize(100, 20)
w.show()
lbl = QLabel()
lbl.setText("foo")
h = QHBoxLayout(w)
h.addStretch()
h.addWidget(lbl)
# Widget 2: without stretch
w2 = QWidget()
w2.move(0, 40)
w2.resize(100, 20)
w2.show()
lbl2 = QLabel()
lbl2.setText("foo")
h2 = QHBoxLayout(w2)
h2.addWidget(lbl2)
QTimer.singleShot(1000, clearlabel)
app.exec_()
Two widgets are shown, one with a QHBoxLayout
with a stretch added, one without:
After 2 seconds, a timer sets both label texts from "foo" to an empty string. In the widget without stretch it works like expected - with the one with, however, the label text doesn't get redrawn:
What's going on there? Is this a Qt bug? Am I missing something?
What I found out so far:
- This only seems to happen when setting an empty string, setting a shorter string works fine.
- However in my real application, it happens without a stretch added as well.
I have now submitted this as QTBUG-36945.