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