2
我想要一個QTreeWidget
,它有一個首選高度,顯示其所有內容,而不顯示滾動條。用例如下:1)QVBoxLayout
中的樹木佔用的空間與其內容成比例; 2)樹木在QScrollArea
中應該只有一個滾動條而不是單個滾動條。如何計算QTreeWidget內容的高度?
我試着查詢樹及其視,但他們總是返回相同的值,不管他們多麼內容有:
size = PySide.QtCore.QSize(100, 30)
sizeHint = PySide.QtCore.QSize(256, 192)
minimumSize = PySide.QtCore.QSize(0, 0)
minimumSizeHint = PySide.QtCore.QSize(76, 76)
maximumSize = PySide.QtCore.QSize(16777215, 16777215)
baseSize = PySide.QtCore.QSize(0, 0)
frameSize = PySide.QtCore.QSize(100, 30)
viewport.size = PySide.QtCore.QSize(94, 5)
viewport.sizeHint = PySide.QtCore.QSize(-1, -1)
viewport.minimumSize = PySide.QtCore.QSize(0, 0)
viewport.minimumSizeHint = PySide.QtCore.QSize(-1, -1)
viewport.maximumSize = PySide.QtCore.QSize(16777215, 16777215)
viewport.baseSize = PySide.QtCore.QSize(0, 0)
viewport.frameSize = PySide.QtCore.QSize(94, 5)
接下來我試着計算大小加入了所有的大小提示爲每個項目:
size = super().sizeHint()
height = self.horizontalScrollBar().sizeHint().height()
rows = 0
it = QtGui.QTreeWidgetItemIterator(self)
while it.value() is not None:
rows += 1
size = it.value().sizeHint(0)
height += size.height()
it += 1
size = QtCore.QSize(size.width(), height)
但是所有項目都返回(-1,-1)的大小。即使樹顯示後,不僅在施工期間。
那麼我該如何計算樹的高度呢?
也許你需要直接詢問委託大小暗示;比較['QTreeWidgetItem :: setSizeHint()']的文檔(http://doc.qt.io/qt-4.8/qtreewidgetitem.html#setSizeHint)。 – Murphy
文檔說,如果沒有設置大小提示,它會詢問代表。我沒有設置任何代表,所以應該使用默認值。樹只包含普通的QTreeWidgetItems。所以它應該返回每個項目的文本的大小,直到我閱讀文檔。 –
那麼,如果項目對象沒有返回有效的大小,我認爲至少委託人應該能夠計算出它。你有沒有嘗試我的建議? – Murphy