我有一个QVBoxLayout,它有一个QSCrollArea,并添加了addStretch()。
QScrollArea在这里只使用了一半的可用空间,尽管下面有可用空间,目前由addStretch占用。
如果QScrollArea的内容足够大,我希望QScrollArea扩展到所有可用空间。当QScrollArea的内容较小时,我希望QScrollArea缩小到该大小,并使用addStetch使用的其余可用空间。
但是,目前,对于小型QScrollArea,这可行,但当QScrollArea的内容较大时,它只会扩展到可用空间的一半。
我尝试为QScrollArea和底层滚动小部件设置各种大小政策,但没有任何作用。
让这个排序的技巧是什么?
这是我的代码剪辑[在Python中,但非常欢迎使用C ++的答案]:
# My setup
self.layout = QVBoxLayout()
self.setLayout(self.layout)
scrollArea = QScrollArea()
self.layout.addWidget(scrollArea)
scrollArea.setWidgetResizable(True)
scrollArea.setEnabled(True)
self.scrollWidget = QWidget()
self.scrollLayout = QVBoxLayout()
self.scrollWidget.setLayout(self.scrollLayout)
scrollArea.setWidget(self.scrollWidget)
# Now what I do is, I add bunch of widgets inside the self.scrollLayout
# and in the end, I perform a self.layout.addStretch() to push them up (verticle Alignment does same)
# Maximum height QScrollArea (scrollArea) gets is stuck at around 50% although I want to take all the space if necessary
我添加了所有可能的setSizePolicy(..)选项
scrollArea.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
# and ALL others. None works. addStretch() still takes 50% minimum space and gets even more if QScrollArea's contents are smaller.
答案 0 :(得分:1)
我遇到了同样的问题,我想我找到了解决方案。不要在QScrollArea之后添加拉伸,而是在QScrollArea布局中添加最后一个元素。因此,在您的代码中,请使用self.scrollLayout.addStretch()
代替self.layout.addStretch()
。
答案 1 :(得分:1)
我找到了解决方案。 有必要覆盖sizeHint来保存scrollarea的滚动小部件。 有必要将最大高度设置为滚动小部件。 并且有必要将此小部件放在QVBoxLayout中,并使用addStretch()将其推到顶部。
答案 2 :(得分:0)
当QScrollArea的内容较小时,我希望QScrollArea缩小 使用addStetch使用的剩余可用空间。到那个大小。
如果QScrollArea的内容很小,您可以将它们对齐到顶部并隐藏垂直滚动条。在这种情况下,您不需要在主垂直布局中添加拉伸。
如果内容大于QScrollArea,则会占用所有可用空间。
我想,这就是你需要的。