设置QScrollbar宽度以防止需要水平滚动条

时间:2012-01-30 17:28:09

标签: resize pyqt pyqt4 qscrollarea

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

我目前使用scrollbar.setFixedWidth()做了一些事情。是否有更好的方法,例如scrollbar.setSizetoContents()或类似的东西?

作为旁注,无论如何,获得布局中所有小部件的最大宽度的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

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

另见Size Hints and Layouts部分。

答案 1 :(得分:1)

我终于明白了。这是我用来查找滚动区域中某个子窗口小部件宽度的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())

此时宽度已填满,因此似乎有效。

同样值得注意的是,我的所有子小部件都已经具有相同的宽度,因为它们位于