Am Dienstag, 18. März 2025, 21:59 schrieb Tobias Leupold: > E-Mail von Tobias Leupold vom Montag, 17. März 2025, 22:50: > > E-Mail von Albert Astals Cid vom Montag, 17. März 2025, 20:38: > > > Can you bisect in which commit the behaviour was introduced? > > > > According to what was said on the Qt forums, it should be those two: > > > > https://codereview.qt-project.org/c/qt/qtbase/+/601315 > > https://codereview.qt-project.org/c/qt/qtbase/+/613831 > > > > cf. https://forum.qt.io/topic/160958/ > > ... and as another follow-up: > > I messed around with this stuff a bit now. > > Using Qt 6.8.1, when no style sheet is set, sizeFromContents() is requested > from Breeze when a QSpinBox should be drawn. It returns QSize(52, 32), and > the > QSpinBox's height is rendered as 32 px, most probably by the default Qt style > class, I didn't find out yet where this happens. > > If a style sheet is set, QStyleSheetStyle::sizeFromContents() comes into > play. > But Breeze's sizeFromContents() is not called in this case. The size stays > initialized to > > QRenderRule rule = renderRule(w, opt); > QSize sz = rule.adjustSize(csz); > > which is QSize(36, 20). > > Later on, (rule.hasBox() || rule.hasBorder() || !rule.hasNativeBorder()) > matches, and the size is increased to QSize(48, 32) by sz = rule.boxSize(sz). > The resulting QSpinBox is thus also drawn with a height of 32 px (looks like > coincidence to me, as Breeze isn't involved at all?!). > > > This changed in Qt 6.8.2: > > When no style sheet is set, the behavior is the same. Breeze's > sizeFromContents() is called, returns QSize(52, 32), and the QSpinBox's > height > is rendered as 32 px. > > But as soon as a style sheet is set, QStyleSheetStyle::sizeFromContents() > takes over. But it behaves differently now: The initial size is overwritten > with what Breeze's sizeFromContents() returns. Which is at this point still a > size with the correct height of 32 px. > > And then, as with 6.8.1, (rule.hasBox() || rule.hasBorder() || ! > rule.hasNativeBorder()) matches and the size increased via sz = > rule.boxSize(sz). But now not from the initial QSize(36, 20) (which doesn't > come from Breeze), but from Breeze's QSize(52, 32), thus resulting in > QSize(64, 44). And here we get a QSpinBox that is rendered too tall. > > > I don't have enough insight of all this to decide if Qt doesn't behave > correctly here, or if Breeze should do something different. I'm not sure > though if Breeze can know at all if QStyleSheetStyle::sizeFromContents() > calls > its sizeFromContents() (where we would need a modified QSpinBox height to get > what we actually want) or if the default style class calls it, where the the > size Breeze returns is rendered as-is. > > > However, I hope this helps either the Qt or the Breeze guys to figure out who > is responsible here and who is free of guilt ... > > > This matches my investigation previously. Not sure why the Qt person was so dismissive that it was a Breeze bug from my limited knowledge Breeze looks to be doing correct things. Maybe I didnt word it clear enough?
David