2011-02-04 5 views
3

どのようにしてQMainWindowのframeSizeを設定しますか?QMainWindow set frameSize

私がやろうとしていることを説明するには、私のプログラムのメインウィンドウの高さが画面の高さからタスクバーを引いたものに等しくなければならないという要件があります。幅は現代のワイドスクリーンモニターの画面幅よりもかなり小さくなければならないので、ウィンドウを最大化することはできません。

QApplication::desktop()->availableGeometry()では、画面の高さからタスクバーを除いた問題が見つかりません。ただし、この値のウィンドウでresizeを呼び出すことはできません。私が言うことができる限り、resizeは、特定のスペース内に外装を作るのではなく、インテリアを一定のスペースを占めるようにします。ドキュメントには、関連するウィンドウプロパティがframeSizeであることが示唆されていますが、直接設定する方法はありません。私はおそらくresizeframeSizeの間でいくつかの試行錯誤のフィードバックを行うことができますが、よりエレガントな/慣用的な方法がありますか?

答えて

6

それほど複雑ではありません。素晴らしい図については、hereを参照してください。 frameGeometry()geometry()を使用してフレーム幅(水平と垂直)を取得してから、resize()(またはより適切な場合はsetFixedSize())を呼び出す前に、フレームサイズからこれらの値を引きます。

これがうまくいかない唯一の方法は、フレームの幅がサイズ変更の結果として変化する場合です。それが動作するかどうか私に教えてください!

+1

右は難しいのは、ウィンドウが最初に表示された後でなければframeGeometryが設定されていないことです(明らかにこれはAPIの欠陥ではありません。Qtは、ウィンドウフレームがホストによって描画されているので、オペレーティング·システム)。回避策:最初にプログラムを実行し、小さなボックスとしてウィンドウを表示し、サーバーに接続するまで待ちます(ユーザーの視点からは自然にジャンプします)。次にスクリーンの高さに合わせてサイズを変更します。次に、実行されるウィンドウジオメトリを保存します。 – rwallace

+0

OK、わかりませんでした。回避策は、保存されたフレームジオメトリが有効であることをリサイズ後に確認することで、完全に堅牢にすることができます。こうすることで、ユーザーがデスクトップスタイルなどを変更した場合は、それに応じてウィンドウを再描画して、次回のために新しい値を保存することができます。 – TonyK

関連する問題