Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

qt - can't resize widgets in QVBoxLayout

I have a container widget with a QVBoxLayout.

I have about 100 widgets added into the VBoxLayout. They all have the same height. At some point there's a need to resize one of the rows. I resize(newWidth, newHeight) the widget and call layout() on the QVBoxLayout, but nothing changes. the size remains fixed.

How do I dynamically change the height of widgets in QVBoxLayout?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

A resize of a widget that is inserted in a layout is a no-op, by design. The layout sizes the widgets, not you.

If you want a fixed-height widget in a QVBoxLayout, you have to set the widget's minimum and maximum height, and ensure its sizePolicy is not ignored in vertical direction.

If you want a widget that's twice the height of all other widgets. Set its stretch to 2, and stretch of other widgets to 1. Call layout->setStretch(index, stretch). The widgets will be assigned width proportionally to their stretches. For example, with all stretches at 1 and one stretch at 2, the widget with stretch 2 will get twice the room.

Everything else being equal (that's the important bit!), stretches are proportional to pixel sizes of widgets. If you want, say all widgets to be 20 pixels tall, but one to be 30 pixels tall, just set their stretches like so.

If the layout has the exact height so that the sum of all widget heights + spacings + margins adds up to layout height, you'll get height=stretch for widgets in the layout. Conversely, if you start with layout height, subtract the top and bottom margins and (widget count - 1)*spacing, you'll have height left for the widgets. You can then manually distribute that height among the widgets by setting stretch equal to desired height.

You may need to override the sizePolicy of the widgets, if they are too big by default.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...