PyQt设置列宽

5

我有一个简单的 QTableView,我基本上想模拟这个:

view.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)

然而,我不能实际使用它,因为这会在每一行上调用sizeHint,这对于我的情况是不可接受的,因为小部件需要在启动时响应并且计算所有行需要很长时间。因此,这不是一个选择。
我知道单个列的大小始终相同,并且始终是具有最大高度的列。但是,该单元格的宽度可能并不总是一行中所有单元格中最宽的。我通过这样做使这些单元格变为正确大小,但这显然使所有单元格的大小相同,许多单元格现在太宽了。
view.horizontalHeader().setDefaultSectionSize(200)
view.verticalHeader().setDefaultSectionSize(100)

我还尝试了设置单独的列宽,但似乎对宽度没有任何影响,就像这样:

view.setColumnWidth(0, 5)

此外,单独设置列宽并不是很好,因为我无法预先知道它们的宽度。有没有办法使用(或模拟)上面展示的“ResizeToContents”方法,但不需要检查所有单元格的大小?
1个回答

3
你是否尝试过使用setResizeContentsPrecisionResizeToContents模式进行优化?
设置QHeaderView在使用ResizeToContents时计算大小的精度。较低的值将提供不太准确但快速的自动调整大小,而较高的值将提供更准确的调整大小,但可能会很慢。数字精度指定在计算首选大小时应考虑多少个部分。默认值为1000,这意味着水平列在进行自动调整大小时将最多查看1000行。
特殊值0表示仅查看可见区域。特殊值-1将意味着查看所有元素。

这正是我一直在寻找的,非常感谢。只有一个后续问题。这完美地处理了列宽,但是,如果我尝试对垂直标题执行相同的操作,它仍然会在所有行上调用sizeHint。在这种情况下,这并不是真正的问题,因为我知道我想要的高度,但是我不明白为什么它不仅查看可见行(难道它不知道将有多少行可见吗?)。此外,如果我将垂直标题精度设置为例如2,则仍将检查所有行。有任何见解吗? - Pavlin
@Pavlin,很高兴你通过这种方式找到了一些解决方法。我像你一样使用它,没有应用于行高度,所以我无法告诉你更多。你观察到-1、0或一个小数字的相同行为吗? - PRMoureu
我尝试了各种不同的值,但它们都导致必须检查所有行。无论如何还是谢谢! - Pavlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接