2017-07-07 105 views
1

我有一个简单的QTableView中,我基本上是想效仿这样的:PyQt的设置列宽

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

但是,我不能实际使用,因为这对每一个单排,这是不可接受的要求sizeHint我的情况,因为小部件在启动时需要响应,并且所有行的计算都需要很长时间。因此这不是一个选项。

我知道单个列的大小是什么,它总是相同的,并且总是具有最大高度的大小。然而,这个单元格的宽度并不总是一行中所有单元格中最宽的。我已经通过这样做了这些细胞的正确大小,但是这显然使所有细胞具有相同的大小,并且许多细胞现在太宽了。

view.horizontalHeader().setDefaultSectionSize(200) 
view.verticalHeader().setDefaultSectionSize(100) 

我也试图设置各列的宽度,但似乎没有任何效果上的宽度可言,像这样:

view.setColumnWidth(0, 5) 

而且,设置各列的宽度不这很好,因为我不能预先知道他们会有多宽。

有什么方法可以使用(或模拟)ResizeToContents方法(如上所示),但是不需要检查所有单元大小?

回答

1

您是否尝试过使用setResizeContentsPrecision优化ResizeToContents模式?

设置QHeaderView在使用ResizeToContents时应该如何计算大小。较低的值将提供较不准确但快速的自动调整大小,而较高的值将提供更准确的调整大小,但可能较慢。

数字精度指定在计算首选大小时应考虑多少部分。

默认值为1000,这意味着在执行自动调整大小时,具有自动调整大小的水平列将在计算时查看最多1000行。

特殊值0意味着它只会查看可见区域。特殊值-1意味着看所有元素。

+0

这正是我所期待的,非常感谢。只是一个后续问题。这完美地处理了列的宽度,但是,如果我尝试对垂直标题做同样的处理,它仍然在所有行上调用'sizeHint'。这在这种情况下并不是真正的问题,因为我知道我想要什么样的高度,但是我不明白为什么这不仅仅看着可​​见的行(它是不知道会有多少行可见?)。此外,如果我将垂直标题精度设置为ex。 2,所有的行仍然被检查。任何见解? – Pavlin

+0

@Pavlin,很高兴你用这种方式找到一些解决办法。我像你一样使用它,没有适用于行的高度,所以我不能告诉你更多。你观察到-1,0或相同的行为? – PRMoureu

+0

我尝试了各种不同的值,但都导致必须检查所有行。不管怎么说,多谢拉! – Pavlin