有没有办法设置QScrollArea
的宽度以便不需要水平滚动条?我知道我可以通过将其策略设置为始终关闭来隐藏水平滚动条。但是,我想让QScrollArea
足够大,不需要它。设置QScrollbar宽度以防止需要水平滚动条
我目前通过使用scrollbar.setFixedWidth()
来做这件事。有没有更好的方法,像scrollbar.setSizetoContents()
或类似的东西?
作为一个附注,什么是最好的方式来获得布局中的所有小部件的最大宽度呢?
有没有办法设置QScrollArea
的宽度以便不需要水平滚动条?我知道我可以通过将其策略设置为始终关闭来隐藏水平滚动条。但是,我想让QScrollArea
足够大,不需要它。设置QScrollbar宽度以防止需要水平滚动条
我目前通过使用scrollbar.setFixedWidth()
来做这件事。有没有更好的方法,像scrollbar.setSizetoContents()
或类似的东西?
作为一个附注,什么是最好的方式来获得布局中的所有小部件的最大宽度呢?
我终于明白了。下面是我用的是找出在scrollarea我的子窗口小部件之一的宽度的hackish代码:
def _restrictWidthToFit(self):
layout = self._scroll.widget().layout()
if layout.count() > 0:
fw = layout.itemAt(0).widget().sizeHint().width()
sw = self._scroll.verticalScrollBar().sizeHint().width()
w = fw + sw
return w
诀窍是我以前设置这个宽度第一添加小部件到scrollarea时。不过,Qt在这一点上并没有完全填充这些大小。因此,我使用上述方法通过重写showEvent()来设置宽度:
def showEvent(self, ev):
super(UIFilterCollection, self).showEvent(ev)
self._scroll.setFixedWidth(self._restrictWidthToFit())
此时宽度填写因此它似乎工作。
这也是值得注意的是,我所有的子部件是相同的宽度已经因为他们是在一个
它看起来像QScrollArea.setWidgetResizable可以做你想做的。但是,这可能取决于滚动区域包含哪些小部件。
另请参阅关于Size Hints and Layouts的部分。
setWidgetResizable似乎并不在我的情况去改变什么。我猜这是因为滚动区域中的基础小部件。 – 2012-01-30 18:51:22
@ durden2.0。你的滚动区域有哪些小部件?如果你在你的问题中添加了一些示例代码,这将有助于说明你正在努力实现的目标。 – ekhumoro 2012-01-30 18:56:49
对不起,这是一个复杂的布局。我会尽量将它归结为基本要素,我在滚动区域的QVBoxLayout中组织了一堆Qlabels。滚动区域然后是另一个HBoxLayout的QHboxLayout的一部分。所以滚动区域的宽度默认为主HBoxLayout大小的一半。我想为默认为最大QLabel宽度的滚动区域设置固定宽度。因此,不需要水平滚动条。 – 2012-01-30 19:06:02