2017-07-07 17 views
1

は、私はシンプルなQTableViewを持っていると私は基本的にこれをエミュレートしたい:これはで容認できないすべての単一の行、上sizeHintを呼び出しているので、PyQtはセット列幅

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

しかし、私は実際にこれを使用することはできません私の場合、ウィジェットは起動時に応答する必要があり、計算にはすべての行に時間がかかるためです。したがって、これは選択肢ではありません。

私はいつも同じで、常に最大の高さを持つ1つの列のサイズを知っています。ただし、このセルの幅は、必ずしも行内のすべてのセルのうちで最も幅が広いとは限りません。私はこれらの細胞をこれを行うことで正しいサイズにしましたが、これは明らかにすべての細胞を同じサイズにし、多くは今では広すぎます。

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

私はまた、個々の列幅を設定しようとしたが、それは幅に全く影響を与えないように見える、このような:

view.setColumnWidth(0, 5) 

をまた、個々の列幅を設定することではありません彼らがどれくらい広がっているのかを私が事前に知ることができないので、素晴らしい。

上記のようにResizeToContentsアプローチを使用する(またはエミュレートする)方法はありますか?すべてのセルサイズを確認する必要はありません。

答えて

1

ResizeToContentsモードをsetResizeContentsPrecisionで最適化しようとしましたか?

ResizeToContentsを使用するときのQHeaderViewのサイズの計算精度を設定します。値を小さくすると精度は低くなりますが、自動サイズ変更は速くなりますが、値が大きくなるほどサイズが小さくなりますが、サイズは小さくなります。

number precisionは、優先サイズを計算する際に考慮する必要があるセクションの数を指定します。

デフォルト値は1000です。つまり、自動サイズ変更を実行すると、自動的にサイズ変更された水平の列は最大1000行を表示します。

特別値0は、表示領域のみを表示することを意味します。特別な値-1は、すべての要素を調べることを意味します。

+0

これは私が探していたものです。ありがとうございます。ただ1つのフォローアップの質問。これは、列の幅を完全に処理しますが、私が垂直ヘッダに対して同じことをしようとすると、すべての行に対して 'sizeHint'を呼び出します。これは本当に問題ではありません。高さを知りたいからですが、なぜこれが目に見える行を見るだけではないのか分かりません(何行目になるのかわかりません表示されますか?)。さらに、垂直のヘッダ精度をexに設定すると、 2の場合、すべての行がまだチェックされています。どんな洞察? – Pavlin

+0

@Pavlin、この方法でいくつかの修正を見つけられたらうれしいです。私は行の高さに適用せずに、あなたがしたようにそれを使用したので、私はあなたにもっと多くを伝えることはできません。 -1、0、または少数の数字で同じ動作を観察しましたか? – PRMoureu

+0

私はさまざまな値を試しましたが、すべてすべての行をチェックする必要がありました。とにかく、ありがとう! – Pavlin