我有一个包含可变长度文本的最后一列的QTableWidget。
我希望根据该节的大小将QHeaderView的最后一部分扩展或调整为其内容。如果内容大小不超过小部件中剩余的空间,我希望扩展它(以防止小部件中出现难看的未填充的空间)。我可以通过使用setStretchLastSection(True)来实现这一点。但是,如果内容大小超过拉伸列,则将剪切我的内容的最后部分,因为该列没有调整大小。QHeaderView为本例提供了ResizeToContents ResizeMode,但在内容较短的情况下,这会给小部件留下未填充的空间。
我考虑手动调整列大小。不幸的是,我不能直接访问内容大小,因为sectionSizeFromContents()是受保护的。我想我可以子类QHeaderView并重新实现它,但是我想知道是否有更好的解决方案。
发布于 2017-12-15 14:28:18
我误解了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)https://stackoverflow.com/questions/47793748
复制相似问题