我有一個QVBoxLayout,它有一個QSCrollArea並在其末尾添加了addStretch()。Qt QVBoxLayout的addStretch strech佔用太多空間(來自佈局)
QScrollArea在這裏只能使用一半的可用空間事件,儘管下面有空閒空間,現在被addStretch佔用。
如果QScrollArea的內容足夠大,我希望QScrollArea擴展到所有可用空間。當QScrollArea的內容較小時,我希望QScrollArea縮小到該大小,其餘的可用空間由addStetch使用。
但是,目前,對於小型QScrollArea來說這可以工作,但是當QScrollArea的內容較大時,它只擴展到可用空間的一半。
我試着設置QScrollArea和底層滾動窗口小部件的各種尺寸策略,但沒有任何工作。
讓這個排序的技巧是什麼?
這裏是我的代碼[在Python,但答案在C++中是非常歡迎]一個文檔片斷:
# My setup
self.layout = QVBoxLayout()
self.setLayout(self.layout)
scrollArea = QScrollArea()
self.layout.addWidget(scrollArea)
scrollArea.setWidgetResizable(True)
scrollArea.setEnabled(True)
self.scrollWidget = QWidget()
self.scrollLayout = QVBoxLayout()
self.scrollWidget.setLayout(self.scrollLayout)
scrollArea.setWidget(self.scrollWidget)
# Now what I do is, I add bunch of widgets inside the self.scrollLayout
# and in the end, I perform a self.layout.addStretch() to push them up (verticle Alignment does same)
# Maximum height QScrollArea (scrollArea) gets is stuck at around 50% although I want to take all the space if necessary
我添加了所有可能的setSizePolicy(..)選項
scrollArea.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
# and ALL others. None works. addStretch() still takes 50% minimum space and gets even more if QScrollArea's contents are smaller.
你可以用你的意思是「覆蓋sizeHint來保存scrollarea的滾動小部件」來改進這個答案嗎?我一直在尋找這個問題的答案几個小時!你看到了什麼(https://xkcd.com/979/)? – Assimilater
當然。創建一個從「QtGui.QWidget」繼承的新類,所以基本上你正在創建一個新的Widget。定義一個名爲「sizeHint」的類函數(這被稱爲「覆蓋」,因爲現在你的函數返回「sizeHint」,而不是「QWidget」的默認「sizeHint」函數)在這個函數中進行計算(比如計算字體大小,邊距等等然後返回「QtCore.QSize(寬度,高度)」(寬度和高度是你的計算結果。希望這有助於。 – Phil