【发布时间】:2012-12-24 07:20:19
【问题描述】:
我有一个 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.
【问题讨论】: