我有一个带有QVBoxLayout的容器小部件。
我在VBoxLayout中添加了大约100个小部件。它们都有相同的高度。 在某些时候,需要调整其中一行的大小。我调整窗口小部件(newWidth,newHeight)并在QVBoxLayout上调用layout(),但没有任何改变。尺寸保持不变。
如何在QVBoxLayout中动态更改小部件的高度?
答案 0 :(得分:5)
根据设计,插入布局中的窗口小部件的大小调整是无操作的。布局会调整窗口小部件的大小,而不是您。
如果你想在QVBoxLayout中使用一个固定高度的小部件,你必须设置小部件的最小和最大高度,并确保在垂直方向不忽略它的sizePolicy。
如果您希望窗口小部件的高度是所有其他窗口小部件的两倍。将其拉伸设置为2,将其他窗口小部件设置为1.调用layout->setStretch(index, stretch)
。小部件将按其长度按比例分配宽度。例如,当所有延伸为1且一个延伸为2时,具有延伸2的小部件将获得两倍的空间。
其他条件相同(这是重要的一点!),延伸与小部件的像素大小成正比。如果你愿意,可以说所有小部件都是20像素高,但是一个高30像素,只需设置它们的延伸就可以了。
如果布局具有确切的高度,以便所有窗口小部件高度+间距+边距的总和加起来布局高度,则布局中的窗口小部件将获得height = stretch。相反,如果从布局高度开始,减去顶部和底部边距以及(窗口小部件数 - 1)*间距,您将为窗口小部件保留高度。然后,您可以通过将拉伸设置为所需高度来手动在窗口小部件之间分配该高度。
如果窗口小部件的默认设置太大,您可能需要覆盖它们的sizePolicy
。