2017-12-27 40 views
1

私はQTreeViewの内にQSplitterの初期サイズを設定したいと思います。私はsetMinimumWidth(val)setFixedWidth(val)の両方をQTreeViewに設定できますが、それらのどちらも私の必要としているようには見えません。QSplitterのQTreeViewの初期サイズを設定する方法は?

setMinimumWidth(val)のみvalの値よりも小さくなってからQTreeViewを防ぎ、setFixedWidthは完全QTreeViewのサイズを変更からユーザーを防止します。

とにかくQSplitterを設定するか、QTreeViewと設定して初期サイズを設定しますか?私はsizeHintを設定する必要があると思っていますが、私はあまりよく分かりません。

私はあなたが最初のサイズを設定するsizeHintを再実装することができますPyQt5

答えて

1

でのPython 3を使用しています:しかし、サブクラスを作成する場合は望ましくない、とあなたが設定を気にしない

class TreeView(QtWidgets.QTreeView): 
    def sizeHint(self): 
     size = super().sizeHint() 
     size.setWidth(320) 
     return size 

をa 比例初期サイズはQSplitter.setSizesです。 Qtドキュメントはこの方法でこの方法の動作を定義します。

スプリッタウィジェットの全体のサイズは影響を受けません。その代わりに、 の追加/欠落したスペースは、の相対的な重量に対して に従うウィジェットに分散されています。

したがって、サイズの合計がスプリッタよりも大きいかどうかは関係ありません。重要なのはすべて相対的な重みです。

width = QtWidgets.qApp.desktop().availableGeometry(self).width() 
self.splitter.setSizes([width * 2/3, width * 1/3]) 

これが第二として、第1のウィジェットが2倍になります。これを考えると、我々はこのように、単に可能な最大サイズが使用可能な計算し、それに応じてそれを分割することができます。

QSplitter.saveStateQSplitter.restoreStateを使用して、以前のセッションからユーザーが設定したスプリッターサイズを保存して復元することもできます。

PS:あなたはQtのデザイナを使用している場合

、上記sizeHintアプローチは実装が非常に簡単であるウィジェットのプロモーション、一緒に使用することができます。これを行う方法については、this answerを参照してください。

+0

'sizeHint()'は 'setSizeHint(width、height)'やそのようなもののような、より単純なマナーでは実装されていないことに、実際には驚いています。私はQt Creatorでレイアウトを作ったので、サブクラス化は望ましくなく、 'QTreeView'で' setWidth(val) 'を直接使うことはできませんが、私が探している場合にはこのメソッドは最良の選択肢のようです正確なサイズ。 @AaronTomason。 –

+0

ウィジェットプロモーションを使用することができます - 私の答えのアップデートを見てください。 – ekhumoro

+0

私はウィジェットプロモーションにスピンを与えると思います。更新していただきありがとうございます! –

関連する問題