我有一个QTableWidget,其中最后一列包含可变长度的文本。
我想根据部分的大小将Qheaderview的最后一部分伸展或将Qheaderview的最后一部分大小。如果内容大小不超过小部件中的剩余空间,我想将其拉伸(以防止小部件中的丑陋,未填充的空间)。我可以使用setStretchLastSection(True)
来实现这一目标。但是,如果内容大小超过拉伸列,则我的内容的最后一部分被切割,因为该列没有调整列的大小。Qheaderview为这种情况提供了ResizeToContents
RESIZEMODE,但是在短内容的情况下,这使小部件具有未填充的空间。
我考虑了手动调整列大小的大小。不幸的是,由于sectionSizeFromContents()
受到保护,我无法直接访问内容大小。我想我可以亚级qheaderview并重新实现它,但是我想知道是否有更好的解决方案。
我误解了 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)