有没有办法设置QScrollArea
的宽度,以便不需要水平滚动条?我知道我可以通过将其策略设置为始终关闭来隐藏水平滚动条。但是,我想让QScrollArea
足够大,不需要它。
我目前使用scrollbar.setFixedWidth()
做了一些事情。是否有更好的方法,例如scrollbar.setSizetoContents()
或类似的东西?
作为旁注,无论如何,获得布局中所有小部件的最大宽度的最佳方法是什么?
答案 0 :(得分:2)
看起来QScrollArea.setWidgetResizable可以做你想做的事。但这可能取决于滚动区域包含哪种小部件。
答案 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())
此时宽度已填满,因此似乎有效。
同样值得注意的是,我的所有子小部件都已经具有相同的宽度,因为它们位于
中