2012-01-30 356 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