有没有办法设置 a 的宽度QScrollArea
以便不需要水平滚动条?我知道我可以通过将其策略设置为始终关闭来隐藏水平滚动条。但是,我想让QScrollArea
它足够大以至于不需要它。
我目前正在通过使用scrollbar.setFixedWidth()
. 有没有更好的方法,类似scrollbar.setSizetoContents()
或类似的东西?
作为旁注,无论如何,获得布局中所有小部件的最大宽度的最佳方法是什么?
有没有办法设置 a 的宽度QScrollArea
以便不需要水平滚动条?我知道我可以通过将其策略设置为始终关闭来隐藏水平滚动条。但是,我想让QScrollArea
它足够大以至于不需要它。
我目前正在通过使用scrollbar.setFixedWidth()
. 有没有更好的方法,类似scrollbar.setSizetoContents()
或类似的东西?
作为旁注,无论如何,获得布局中所有小部件的最大宽度的最佳方法是什么?
看起来QScrollArea.setWidgetResizable可以做你想做的事。但这可能取决于滚动区域包含的小部件类型。
另请参阅尺寸提示和布局部分。
我终于弄明白了。这是我用来找出滚动区域中一个子小部件的宽度的黑客代码:
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())
此时宽度已填满,因此似乎可以正常工作。
还值得注意的是,我所有的子小部件的宽度已经相同,因为它们位于