QHeaderView:Stretch或ResizeToContents基于列'内容大小

时间:2017-12-13 13:04:26

标签: qt pyqt qt5 pyqt5 qheaderview

我有一个QTableWidget,其最后一列包含可变长度的文本。

我想根据节的大小将QHeaderView的最后一部分拉伸或调整为其内容。如果内容大小不超过窗口小部件中的剩余空间,我想要拉伸它(以防止窗口小部件中的丑陋,未填充空间)。我可以使用setStretchLastSection(True)来实现这一目标。但是,如果内容大小超出拉伸列,则会剪切内容的最后部分,因为列未调整大小。 QHeaderView为这种情况提供了ResizeToContents ResizeMode,但是在短内容的情况下,这会为小部件留下未填充的空间。

我考虑过手动调整列大小。很遗憾,我无法直接访问内容大小,因为sectionSizeFromContents()受到保护。我想我可以继承QHeaderView并重新实现它,但我想知道是否有更好的解决方案。

1 个答案:

答案 0 :(得分:1)

我误解了QHeaderView::sectionSizeFromContents()的功能。我假设它返回属于该部分的单元格的节大小,但是此信息当然不能存储在标题中。相反,它返回标题内容的大小,即给定的标签。

但是,可以通过QTableWidget::sizeHintForColumn()获取列的内容大小。我的表只有两列,所以要计算我可以使用的第二列的剩余空间:

stretched_size = table.viewport().size().width() - table.horizontalHeader().sectionSize(0)

等于ResizeMode::Stretch中的列大小。因此,我可以通过将截面尺寸设置为拉伸尺寸的最大值和列的尺寸提示来解决我的问题:

size = max(table.sizeHintForColumn(1), stretched_size)
table.horizontalHeader().resizeSection(1, size)