3

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

我想根据部分的大小将 QHeaderView 的最后一部分拉伸或调整为其内容。如果内容大小不超过小部件中的剩余空间,我想拉伸它(以防止小部件中出现丑陋的未填充空间)。我可以通过使用setStretchLastSection(True). 但是,如果内容大小超过了拉伸列,我的内容的最后部分将被剪切,因为该列没有调整大小。QHeaderView 为这种情况提供了ResizeToContentsResizeMode,但是在内容较短的情况下,这会使小部件留有未填充的空间。

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

4

1 回答 1

5

我误解了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)
于 2017-12-15T14:28:18.547 回答