QHeaderView:根据列的内容大小拉伸或调整内容大小
QHeaderView: Stretch or ResizeToContents based on columns' content size
我有一个 QTableWidget,其最后一列包含可变长度的文本。
我想根据该部分的大小拉伸或调整 QHeaderView 最后一部分的内容。如果内容大小不超过小部件中剩余的 space,我想拉伸它(以防止小部件中出现难看的、未填充的 space)。我可以通过使用 setStretchLastSection(True)
来实现。但是,如果内容大小超过拉伸的列,我的内容的最后部分将被剪切,因为列的大小没有调整。 QHeaderView 为这种情况提供了 ResizeToContents
ResizeMode,但是在短内容的情况下,这会使小部件未填充 space。
我考虑过手动调整列大小。不幸的是,我无法直接访问内容大小,因为 sectionSizeFromContents()
受到保护。我想我可以继承 QHeaderView 并重新实现它,但我想知道是否有更好的解决方案。
我误解了 QHeaderView::sectionSizeFromContents()
的功能。我假设它 returns 属于该部分的单元格的部分大小,但此信息当然不能存储在 header 中。相反,它 returns header 内容的大小,即给定的标签。
但是,可以通过 QTableWidget::sizeHintForColumn()
获取列的内容大小。我的 table 只有两列,因此要计算第二列的剩余 space,我可以使用:
stretched_size = table.viewport().size().width() - table.horizontalHeader().sectionSize(0)
等于 ResizeMode::Stretch
中的列大小。因此,我可以通过将部分大小设置为拉伸大小和列大小提示的最大值来解决我的问题:
size = max(table.sizeHintForColumn(1), stretched_size)
table.horizontalHeader().resizeSection(1, size)
我有一个 QTableWidget,其最后一列包含可变长度的文本。
我想根据该部分的大小拉伸或调整 QHeaderView 最后一部分的内容。如果内容大小不超过小部件中剩余的 space,我想拉伸它(以防止小部件中出现难看的、未填充的 space)。我可以通过使用 setStretchLastSection(True)
来实现。但是,如果内容大小超过拉伸的列,我的内容的最后部分将被剪切,因为列的大小没有调整。 QHeaderView 为这种情况提供了 ResizeToContents
ResizeMode,但是在短内容的情况下,这会使小部件未填充 space。
我考虑过手动调整列大小。不幸的是,我无法直接访问内容大小,因为 sectionSizeFromContents()
受到保护。我想我可以继承 QHeaderView 并重新实现它,但我想知道是否有更好的解决方案。
我误解了 QHeaderView::sectionSizeFromContents()
的功能。我假设它 returns 属于该部分的单元格的部分大小,但此信息当然不能存储在 header 中。相反,它 returns header 内容的大小,即给定的标签。
但是,可以通过 QTableWidget::sizeHintForColumn()
获取列的内容大小。我的 table 只有两列,因此要计算第二列的剩余 space,我可以使用:
stretched_size = table.viewport().size().width() - table.horizontalHeader().sectionSize(0)
等于 ResizeMode::Stretch
中的列大小。因此,我可以通过将部分大小设置为拉伸大小和列大小提示的最大值来解决我的问题:
size = max(table.sizeHintForColumn(1), stretched_size)
table.horizontalHeader().resizeSection(1, size)