6

で構成されるアプリケーションを作成しようとしていますQMainWindow。その中央のウィジェットはQToolBar(通常ではないかもしれませんが、私の目的にはツールバーが適しています)。ドックは下のみ許可されます。それに を追加しQDockWidget、 の と でQActionオンとオフをQToolBar切り替えます。QDockWidgetremoveDockWidget()restoreDockWidget()

のデフォルト サイズQMainWindowは 800 x 24 で、も 24 に設定されています。が呼び出された直後に、のジオメトリはwith に戻されます。QToolBarmaximumHeightremoveDockWidget()QMainWindow(0,0,800,24)setGeometry()

私が達成したいのは、 が削除されQMainWindowたときに の高さを 24 にサイズ変更することです。DockWidget幅と位置がそれに応じて変化するため、機能しているsetGeometry()ように見えますが、おかしなことに、高さは変わりません。そして、それは本当に私の問題です:)

どう思う?

これは、当面の問題を示すスクリーンキャストです。

注意: QMainWindow ではなく QWidget を使用して同じシナリオを作成し、子ウィジェットでshow()orを使用すると、問題なくhide()親のサイズを変更できadjustSize()ます: 上記の問題は QMainWindow 固有のようです。

4

2 に答える 2

2

オプション

a) sizeHint() 仮想関数をオーバーロードできます。メインウィンドウに必要なサイズを返します。

b) メイン ウィンドウのコンストラクターで、目的のメイン ウィンドウ サイズを指定して、setMinimumSize() と setMaximumSize() を次々に呼び出すことができます。両方を同じにすると、固定サイズになります。

c) layout()->setResizeMode(Fixed) を見てください。

于 2011-08-16T07:55:38.903 に答える
1

メソッドの意味を誤解しているようですQMainWindow.sizeHint()

QWidget.sizeHint()ドキュメントによると(QMainWindow継承元):

このプロパティは、ウィジェットの推奨サイズを保持します。

このプロパティの値が無効なサイズの場合、推奨されるサイズはありません。sizeHint() のデフォルトの実装は、このウィジェットのレイアウトがない場合は無効なサイズを返し、それ以外の場合はレイアウトの優先サイズを返します。

ウィンドウの実際のサイズを取得するには、QMainWindow.geometry()代わりにメソッドを使用する必要があります。これにより、ウィジェットのサイズと位置に関するすべての情報が得られます。

win_geo = self.geometry()
win_top = win_geo.top()
win_bottom = win_geo.bottom()
win_left = win_geo.left()
win_right = win_geo.right()
win_width = win_geo.width()
win_height = win_geo.height()
于 2011-08-16T21:56:35.230 に答える