2012-01-30 360 views
2

有没有办法设置QScrollArea的宽度以便不需要水平滚动条?我知道我可以通过将其策略设置为始终关闭来隐藏水平滚动条。但是,我想让QScrollArea足够大,不需要它。设置QScrollbar宽度以防止需要水平滚动条

我目前通过使用scrollbar.setFixedWidth()来做这件事。有没有更好的方法,像scrollbar.setSizetoContents()或类似的东西?

作为一个附注,什么是最好的方式来获得布局中的所有小部件的最大宽度呢?

回答

1

我终于明白了。下面是我用的是找出在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()) 

此时宽度填写因此它似乎工作。

这也是值得注意的是,我所有的子部件是相同的宽度已经因为他们是在一个

2

它看起来像QScrollArea.setWidgetResizable可以做你想做的。但是,这可能取决于滚动区域包含哪些小部件。

另请参阅关于Size Hints and Layouts的部分。

+0

setWidgetResizable似乎并不在我的情况去改变什么。我猜这是因为滚动区域中的基础小部件。 – 2012-01-30 18:51:22

+0

@ durden2.0。你的滚动区域有哪些小部件?如果你在你的问题中添加了一些示例代码,这将有助于说明你正在努力实现的目标。 – ekhumoro 2012-01-30 18:56:49

+0

对不起,这是一个复杂的布局。我会尽量将它归结为基本要素,我在滚动区域的QVBoxLayout中组织了一堆Qlabels。滚动区域然后是另一个HBoxLayout的QHboxLayout的一部分。所以滚动区域的宽度默认为主HBoxLayout大小的一半。我想为默认为最大QLabel宽度的滚动区域设置固定宽度。因此,不需要水平滚动条。 – 2012-01-30 19:06:02