1

左右のドッキング領域にドッキングされたQDockWidgetsを備えたQMainWindowを持つPyQt4アプリケーションがあります。現在、左側に2つのウィジェット、下部に2つのウィジェットがドッキングされています。中央のウィジェットとドックエリアの間の境界をプログラムで移動して、ドックエリアの幅(左または右のエリアの場合)または高さ(上下のドックエリアの場合)を効果的に変更する方法を理解しようとしています。 )。

これはマウスを使って手動で行うことができます。中央のウィジェットとドック領域の境界にカーソルを移動すると、ドック領域を拡大するために使用できるサイズ変更ハンドルが表示されます。プログラムからそれを実行できるインターフェイスをまだ見つけていません。QDockWidgetオブジェクト自体(ドキュメントで推奨されている)とそれらがラップするウィジェット(動作するはずです)のサイズを手動で変更しようとしましたが、動作しないようです。何か案は?

具体的には、この種のアプローチは機能しません。

dock1.resize(QSize(width, height))
dock2.resize(QSize(width, height))
dock3.resize(QSize(width, height))

これもしません:

dock1.widget().resize(QSize(width, height))
dock2.widget().resize(QSize(width, height))
dock3.widget().resize(QSize(width, height))
4

1 に答える 1

7

私は何が起こるか理解していると思います。最初に、ドキュメントからのいくつかのメモ。

最初QMainWindow

QMainWindowには、QToolBars、QDockWidgets、QMenuBar、およびQStatusBarを追加できる独自のレイアウトがあります。レイアウトには、あらゆる種類のウィジェットが占めることができる中央領域があります。

AQMainWindowには独自のレイアウトマネージャーがあります。つまり、アイテムのレイアウトを管理します。ドキュメントで参照を見つけることができませんでしたが、レイアウトマネージャーはの領域を最大化しようとしていると思いますcentralWidget。したがって、他のすべての要素は最小限に縮小されます。

見てみましょうQDockWidget

QDockWidgetは、setWidget()で設定された子ウィジェットのラッパーとして機能します。カスタムサイズのヒント、最小および最大サイズ、サイズポリシーは、子ウィジェットに実装する必要があります。QDockWidgetはそれらを尊重し、フレームとタイトルを含めるように独自の制約を調整します。サイズ制約は、ドッキングされているかどうかによって変わるため、QDockWidget自体に設定しないでください。ドッキングされたQDockWidgetには、フレームがなく、タイトルバーが小さくなっています。

つまり、これは、内のウィジェットのサイズを変更する必要があることを意味しますQDockWidget。aQDockWidgetがフローティングの場合、ウィジェットの要求に応じて自由にサイズを変更できます。ただし、ドッキングすると、レイアウトマネージャーに任せられ、QMainWindow縮小されます。

おそらく最も簡単な解決策は、minimumSize内部のウィジェットを設定しQDockWidgetて、のレイアウトマネージャーがQMainWindowそれを超えてウィジェットを縮小しないようにすることです。または、ウィジェットのメソッドをサブクラス化して再実装sizeHintし、レイアウトマネージャーが適切なサイズを取得できるようにすることもできます。

要するに、これはうまくいくはずです:

dock1.widget().setMinimumSize(QSize(width, height))
dock2.widget().setMinimumSize(QSize(width, height))
dock3.widget().setMinimumSize(QSize(width, height))
于 2012-04-20T23:28:25.630 に答える