Qt Widgets Designerでレイアウトを使用する

フォームを使用する前に、フォーム上のオブジェクトをレイアウトに配置する必要があります。これにより、フォームがプレビューされたり、アプリケーションで使用されたときに、オブジェクトが適切に表示されるようになります。また、レイアウトにオブジェクトを配置することで、フォームのサイズが変更されたときにオブジェクトのサイズが正しく変更されるようになります。

ウィジェットがレイアウトに挿入されると、レイアウト自体がスペーサが提供するヒントを考慮して、レイアウト内の各ウィジェットのジオメトリを制御するため、ウィジェットを個別に移動したりサイズを変更したりすることはできません。スペーサをレイアウトに追加して、ウィジェットのジオメトリに影響を与えることができます。

レイアウトはネストして階層を形成することができます。例えば、横一列にボタンが並んだ典型的なダイアログ・レイアウトを実現するために、ダイアログ要素を縦長のボックス・レイアウトでレイアウトし、一番下にボタンを含む横長のボックス・レイアウトを配置することができます。Qtのレイアウトシステムについては、「レイアウト管理」を参照してください。

レイアウトを解除するには、Ctrl+0を押すか、フォームのコンテキストメニュー、フォームメニュー、またはメインツールバーから「レイアウトの解除」を選択します。

トップ・レベル・レイアウトの設定

フォームのトップレベルレイアウトは、選択範囲をクリアして(フォーム上でマウスの左ボタンをクリック)、レイアウトを適用することで設定できます。トップレベル・レイアウトは、ウィジェットのウィンドウ・サイズが変更されたときに、ウィジェットのサイズが正しく変更されるようにするために必要です。トップレベル・レイアウトを設定したかどうかを確認するには、ウィジェットをプレビューし、サイズ・グリップをドラッグしてウィンドウのサイズを変更してみてください。

レイアウトの適用

レイアウトを適用するには、左のツールバー、または下のコンテキストメニューからレイアウトを選択します。

同様に、トップレベルのレイアウトは、コンテナウィジェット(QGroupBox)、またはページベースのコンテナウィジェットのページ(QTabWidget,QToolBox,QStackedWidget)にそれぞれ設定されます。これを成功させるには、コンテナ・ウィジェットが選択されている必要があります。

トップ・レベル・レイアウトは、オブジェクト・インスペクタに独立したオブジェクトとして表示されません。それらのプロパティは、プロパティ・エディタのメイン・フォーム、コンテナ・ウィジェット、またはコンテナ・ウィジェットのページのウィジェット・プロパティの下に表示されます。

レイアウト・オブジェクト

レイアウト・オブジェクトは、既存のオブジェクト・グループにレイアウトを適用することで作成されます。これは、管理する必要のあるオブジェクトを選択し、メインツールバー、フォームメニュー、またはフォームのコンテキストメニューを使用して、標準レイアウトのいずれかを適用することで実現されます。

レイアウトオブジェクトは、フォーム上に赤枠で表示され、オブジェクトインスペクタにオブジェクトとして表示されます。そのプロパティ(マージンや制約)は、プロパティエディタに表示されます。

レイアウト・オブジェクトを選択し、他のウィジェットやレイアウト・オブジェクトと共に別のレイアウト内に配置することで、レイアウト階層を構築することができます。

子レイアウト・オブジェクトが選択されているとき、Shiftキーを押しながらクリックすると、その親レイアウト・オブジェクトを選択することができます。これにより、フレームが小さいために困難であった、階層内の特定のレイアウトの選択が可能になります。

レイアウトへのオブジェクトの挿入

オブジェクトを現在の位置からドラッグし、必要な位置にドロップすることで、既存のレイアウトに挿入することができます。オブジェクトがレイアウトの上にドラッグされると、青いカーソルが表示され、オブジェクトが追加される場所を示します。

レイアウトへのオブジェクトの挿入

レイアウトの種類

水平および垂直(ボックス)レイアウト

フォーム上にオブジェクトを配置する最も簡単な方法は、水平または垂直レイアウトに配置することです。水平レイアウトは、中のウィジェットが水平に並ぶことを保証し、垂直レイアウトは、ウィジェットが垂直に並ぶことを保証します。

水平レイアウトと垂直レイアウトは組み合わせることができ、任意の深さまで入れ子にすることができます。しかし、オブジェクトの配置をよりコントロールする必要がある場合は、グリッドレイアウトの使用を検討してください。

グリッドレイアウト

グリッドレイアウトにオブジェクトを配置することで、複雑なフォームレイアウトを作成することができます。このようなレイアウトは、フォームデザイナーがフォーム上にウィジェットを配置する自由度が高くなりますが、レイアウトの自由度は低くなります。しかし、フォームレイアウトの種類によっては、ネストされた水平・垂直レイアウトよりもグリッドレイアウトの方が適している場合もあります。

フォームレイアウト

QFormLayout クラスは、2カラムのフォームでウィジェットを管理します。左カラムにはラベルを、右カラムには行編集やスピン・ボックスなどのフィールド・ウィジェットを配置します。QFormLayout クラスは様々なプラットフォームのルック&フィールのガイドラインに準拠し、長い行の折り返しをサポートします。

上記のUIファイルにより、以下のようなプレビューが表示されます。

Windows XPmacOSクリーンルック

スプリッターレイアウト

フォーム上のオブジェクトのレイアウトを管理するもうひとつの一般的な方法は、オブジェクトをスプリッタに配置することです。これらのスプリッターは、通常のレイアウトと同じようにオブジェクトを水平または垂直に配置しますが、各オブジェクトに割り当てられるスペースの量を調整することもできます。

QSplitter はコンテナウィジェットですが、Qt Widgets Designer ではスプリッタオブジェクトを既存のウィジェットに適用するレイアウトとして扱います。ウィジェットのグループをスプリッタに配置するには、ここで説明するようにウィジェットを選択し、適切なツールバーボタン、キーボードショートカット、またはコンテキストメニューの[レイアウト]を使用してスプリッタレイアウトを適用します。

ショートカットキー

標準のツールバーとコンテキストメニューに加えて、ウィジェットにレイアウトを適用するためのキーボードショートカットも用意されています。

レイアウトショートカット説明
水平Ctrl+1選択したオブジェクトを水平レイアウトにします。
垂直Ctrl+2選択されたオブジェクトを垂直方向に配置する。
グリッドCtrl+5選択オブジェクトをグリッドレイアウトに配置する。
フォームCtrl+6選択オブジェクトをフォームレイアウトに配置する。
水平スプリッターCtrl+3水平スプリッターを作成し、選択オブジェクトをその中に配置します。
垂直スプリッターCtrl+4垂直方向のスプリッターを作成し、選択したオブジェクトをその中に配置します。
サイズの調整Ctrl+Jレイアウトのサイズを調整し、各子オブジェクトがその内容を表示するのに十分なスペースを確保できるようにします。詳しくはQWidget::adjustSize() を参照してください。

注意: Ctrl+0はレイアウトを崩すときに使います。

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。