tsa*_*sch 3 qt pyqt qheaderview qt5 pyqt5
我有一个 QTableWidget,最后一列包含可变长度的文本。
我想根据该部分的大小将 QHeaderView 的最后一部分拉伸或调整为其内容的大小。如果内容大小不超过小部件中的剩余空间,我想拉伸它(以防止小部件中出现丑陋、未填充的空间)。我可以通过使用setStretchLastSection(True)
. 但是,如果内容大小超过拉伸的列,则内容的最后部分将被剪切,因为该列未调整大小。QHeaderViewResizeToContents
为这种情况提供了ResizeMode,但在内容较短的情况下,这会使小部件具有未填充的空间。
我想过手动调整列大小。不幸的是,由于sectionSizeFromContents()
受保护,我无法直接访问内容大小。我想我可以继承 QHeaderView 并重新实现它,但我想知道是否有更好的解决方案。
我误解了QHeaderView::sectionSizeFromContents()
. 我假设它返回属于该部分的单元格的部分大小,但此信息当然不能存储在标题中。相反,它返回标题内容的大小,即给定的标签。
但是,可以通过 获取列的内容大小QTableWidget::sizeHintForColumn()
。我的表只有两列,所以要计算第二列的剩余空间,我可以使用:
stretched_size = table.viewport().size().width() - table.horizontalHeader().sectionSize(0)
Run Code Online (Sandbox Code Playgroud)
这等于ResizeMode::Stretch
. 因此,我可以通过将部分大小设置为拉伸大小和列大小提示的最大值来解决我的问题:
size = max(table.sizeHintForColumn(1), stretched_size)
table.horizontalHeader().resizeSection(1, size)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3385 次 |
最近记录: |