2

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

我目前正在通过使用scrollbar.setFixedWidth(). 有没有更好的方法,类似scrollbar.setSizetoContents()或类似的东西?

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

4

2 回答 2

2

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

另请参阅尺寸提示和布局部分。

于 2012-01-30T18:41:34.653 回答
1

我终于弄明白了。这是我用来找出滚动区域中一个子小部件的宽度的黑客代码:

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

诀窍是我之前在第一次将小部件添加到滚动区域时设置了这个宽度。但是,此时显然 Qt 并没有完全填充这些尺寸。因此,我使用上述方法通过覆盖 showEvent() 来设置宽度:

def showEvent(self, ev):
    super(UIFilterCollection, self).showEvent(ev)
    self._scroll.setFixedWidth(self._restrictWidthToFit())

此时宽度已填满,因此似乎可以正常工作。

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

于 2012-01-31T14:51:16.917 回答