Qt QVBoxLayout addStretch拉伸占用太多空间(从布局)

时间:2013-01-10 00:23:30

标签: c++ python qt pyqt pyside

我有一个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.

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我想我找到了解决方案。不要在QScrollArea之后添加拉伸,而是在QScrollArea布局中添加最后一个元素。因此,在您的代码中,请使用self.scrollLayout.addStretch()代替self.layout.addStretch()

答案 1 :(得分:1)

我找到了解决方案。 有必要覆盖sizeHint来保存scrollarea的滚动小部件。 有必要将最大高度设置为滚动小部件。 并且有必要将此小部件放在QVBoxLayout中,并使用addStretch()将其推到顶部。

答案 2 :(得分:0)

  

当QScrollArea的内容较小时,我希望QScrollArea缩小   使用addStetch使用的剩余可用空间。到那个大小。

如果QScrollArea的内容很小,您可以将它们对齐到顶部并隐藏垂直滚动条。在这种情况下,您不需要在主垂直布局中添加拉伸。

如果内容大于QScrollArea,则会占用所有可用空间。

我想,这就是你需要的。