我遇到了一个真正的挑战,就是QScrollArea
将可能的最小空间提升到最大高度。
我的 GUI 模型如下: AQScrollArea
包含一个垂直布局,其中填充了 class 的小部件TableRow
。我希望这个类TableRow
占据尽可能小的高度。它在顶部有一个始终可见的小部件,在其QScrollArea
下方有一个标签,其可见性可以切换。该标签适用于可能是 0 个字符或无限长的注释(除了硬件限制)。
我发现,对于类中的标签,TableRow
将垂直设置sizePolicy
为Fixed
实际上会占用它需要多少来适应所有内容(请参阅: Qt 布局,在小部件大小更改后调整为最小值)。但是,这似乎不适用于QScrollArea
. 事实上,sizePolicy
我尝试过的每一个都保持QScrollArea
在一个固定的高度;除了Ignore
,但QScrollArea
不管它的内容如何,它的高度都为 0。
我创建了一个git 分支,生成了这个问题的简化版本。
这是应用固定垂直 sizePolicy 的结果:
我对这个测试用例的期望:
- 第一个小部件的高度应接近 30 像素(上部小部件的高度),仅显示和的
QLabel
边框QScrollArea
- 第二个小部件的高度应小于 130 像素(最大高度为 100
QScrollArea
像素),但大到足以显示标签而无需滚动 - 第三个小部件的高度应该是 130 像素,并且应该出现滚动条(这部分在我尝试过的所有情况下都是正确的,除了垂直
sizePolicy
设置为时Ignored
)
我知道我可能需要重写一些东西才能使它工作,因为它本身并不明显为什么 QScrollArea 的高度可能取决于它的子小部件(这可能就是为什么它不是为了让这件事变得简单,或者至少看起来好像不是)。
但是,我认为我试图提出的案例已经足够普遍,我目前的做法是合理的。如果有另一种/更好的方法可以使单个小部件在达到最大高度后滚动,我愿意作为答案,只要它满足我期望的三个条件。