2017-07-07 100 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