このページでは

QLayout Class

QLayout クラスは、ジオメトリマネージャの基底クラスです。詳細...

ヘッダー: #include <QLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
継承元:QObject およびQLayoutItem
継承元:

QBoxLayout、QFormLayout 、QGridLayout 、およびQStackedLayout

パブリック型

enum SizeConstraint { SetDefaultConstraint, SetFixedSize, SetMinimumSize, SetMaximumSize, SetMinAndMaxSize, SetNoConstraint }

プロパティ

パブリック関数

QLayout(QWidget *parent = nullptr)
bool activate()
virtual void addItem(QLayoutItem *item) = 0
void addWidget(QWidget *w)
QMargins contentsMargins() const
QRect contentsRect() const
virtual int count() const = 0
void getContentsMargins(int *left, int *top, int *right, int *bottom) const
QLayout::SizeConstraint horizontalSizeConstraint() const
virtual int indexOf(const QLayoutItem *layoutItem) const
virtual int indexOf(const QWidget *widget) const
bool isEnabled() const
virtual QLayoutItem *itemAt(int index) const = 0
QWidget *menuBar() const
QWidget *parentWidget() const
void removeItem(QLayoutItem *item)
void removeWidget(QWidget *widget)
virtual QLayoutItem *replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively)
bool setAlignment(QWidget *w, Qt::Alignment alignment)
bool setAlignment(QLayout *l, Qt::Alignment alignment)
void setContentsMargins(const QMargins &margins)
void setContentsMargins(int left, int top, int right, int bottom)
void setEnabled(bool enable)
void setHorizontalSizeConstraint(QLayout::SizeConstraint constraint)
void setMenuBar(QWidget *widget)
void setSizeConstraint(QLayout::SizeConstraint constraint)
(since 6.10) void setSizeConstraints(QLayout::SizeConstraint horizontal, QLayout::SizeConstraint vertical)
virtual void setSpacing(int)
void setVerticalSizeConstraint(QLayout::SizeConstraint constraint)
QLayout::SizeConstraint sizeConstraint() const
virtual int spacing() const
virtual QLayoutItem *takeAt(int index) = 0
(since 6.1) void unsetContentsMargins()
void update()
QLayout::SizeConstraint verticalSizeConstraint() const

再実装されたパブリック関数

virtual QSizePolicy::ControlTypes controlTypes() const override
virtual Qt::Orientations expandingDirections() const override
virtual QRect geometry() const override
virtual void invalidate() override
virtual bool isEmpty() const override
virtual QLayout *layout() override
virtual QSize maximumSize() const override
virtual QSize minimumSize() const override
virtual void setGeometry(const QRect &r) override

静的パブリックメンバー

QSize closestAcceptableSize(const QWidget *widget, const QSize &size)

protected関数

void addChildLayout(QLayout *childLayout)
void addChildWidget(QWidget *w)
QRect alignmentRect(const QRect &r) const

再実装された保護関数

virtual void childEvent(QChildEvent *e) override

詳細な説明

これは、QBoxLayout 、QGridLayout 、QFormLayout 、およびQStackedLayout といった具体的なクラスが継承する抽象基底クラスです。

QLayout のサブクラスや `QMainWindow ` を使用する場合、`setSizeConstraint()` や `setMenuBar()` など、QLayout が提供する基本関数を使用する必要はほとんどありません。詳細については、「レイアウト管理」を参照してください。

独自のレイアウトマネージャを作成するには、addItem()、sizeHint()、setGeometry()、itemAt()、およびtakeAt() 関数を実装します。また、スペースが不足している場合にレイアウトのサイズがゼロに縮小されないようにするため、minimumSize() も実装する必要があります。高さが幅に依存する子要素をサポートするには、hasHeightForWidth() およびheightForWidth() を実装します。 カスタムレイアウトマネージャの実装に関する詳細については、「Flow Layout」の例を参照してください。

レイアウトマネージャが削除されると、ジオメトリ管理は停止します。

「 QLayoutItem」 、「レイアウト管理」、「基本レイアウトの例」、および「フローレイアウトの例」も参照してください 。

メンバ型のドキュメント

enum QLayout::SizeConstraint

レイアウトがウィジェットのサイズをどのように制限するかを説明します。

垂直方向の制約はウィジェットの高さに影響し、水平方向の制約は幅に影響します。

指定可能な値は次のとおりです。

定数値説明
QLayout::SetDefaultConstraint0制約が設定された向きにおいて、最小サイズがすでに設定されていない限り、ウィジェットの最小範囲は `minimumSize()` に設定されます。
QLayout::SetFixedSize3制約された向きにおいて、ウィジェットの範囲はsizeHint()に設定され、その方向へのサイズ変更は行えません。
QLayout::SetMinimumSize2制約された向きでは、ウィジェットの最小範囲はminimumSize() に設定されます。
QLayout::SetMaximumSize4制約された向きでは、ウィジェットの最大範囲はmaximumSize() に設定され、その方向へのサイズ変更はできません。
QLayout::SetMinAndMaxSize5制約された向きでは、ウィジェットの最小範囲はminimumSize() に設定され、最大範囲はmaximumSize() に設定されます。
QLayout::SetNoConstraint1ウィジェットにはサイズ制限は適用されません。

setSizeConstraint()、setSizeConstraints()、horizontalSizeConstraint()、setHorizontalSizeConstraint()、およびsetVerticalSizeConstraint()も参照してください 。

プロパティのドキュメント

contentsMargins : QMargins

このプロパティは、レイアウトの周囲に使用される余白を指定します

デフォルトでは、QLayout はスタイルで指定された値を使用します。ほとんどのプラットフォームでは、マージンは全方向に11ピクセルです。

アクセス関数:

QMargins contentsMargins() const
void setContentsMargins(int left, int top, int right, int bottom)
void setContentsMargins(const QMargins &margins)
void unsetContentsMargins()

関連項目: setContentsMargins() およびgetContentsMargins()。

[since 6.10] horizontalSizeConstraint : SizeConstraint

このプロパティは、水平方向のサイズ制限を指定します。

デフォルトのモードはQLayout::SetDefaultConstraint

この列挙型は Qt 6.10 で導入されました。

アクセス関数:

QLayout::SizeConstraint horizontalSizeConstraint() const
void setHorizontalSizeConstraint(QLayout::SizeConstraint constraint)

verticalSizeConstraint() およびsizeConstraint()も参照してください 。

sizeConstraint : SizeConstraint

このプロパティは、レイアウトのサイズ変更モードを保持します。ダイアログのサイズ制限を設定します。垂直または水平のサイズ制限を設定すると、この設定は上書きされます。

デフォルトのモードは `SetDefaultConstraint` です。

アクセス関数:

QLayout::SizeConstraint sizeConstraint() const
void setSizeConstraint(QLayout::SizeConstraint constraint)

関連項目: horizontalSizeConstraint() およびverticalSizeConstraint()。

spacing : int

このプロパティは、レイアウト内のウィジェット間の間隔を指定します

値が明示的に設定されていない場合、レイアウトの間隔は親レイアウト、または親ウィジェットのスタイル設定から継承されます。

QGridLayout およびQFormLayout の場合、setHorizontalSpacing()およびsetVerticalSpacing()を使用して、水平方向と垂直方向の余白を別々に設定することが可能です。その場合、spacing()は-1を返します。

関連関数:

virtual int spacing() const
virtual void setSpacing(int)

関連項目: contentsRect()、getContentsMargins()、QStyle::layoutSpacing()、およびQStyle::pixelMetric()。

[since 6.10] verticalSizeConstraint : SizeConstraint

このプロパティは、垂直方向のサイズ制限を指定します。

デフォルトのモードはQLayout::SetDefaultConstraint

この列挙型は Qt 6.10 で導入されました。

アクセス関数:

QLayout::SizeConstraint verticalSizeConstraint() const
void setVerticalSizeConstraint(QLayout::SizeConstraint constraint)

horizontalSizeConstraint() およびsizeConstraint()も参照してください 。

メンバ関数のドキュメント

[explicit] QLayout::QLayout(QWidget *parent = nullptr)

親がparent である新しいトップレベルのQLayoutを構築します。

このレイアウトは、parent のトップレベルレイアウトとして直接設定されます。ウィジェットにはトップレベルレイアウトが1つしか存在できません。これはQWidget::layout()によって返されます。

parent がnullptr である場合、このレイアウトを別のレイアウトに挿入するか、QWidget::setLayout()を使用してウィジェットのレイアウトとして設定する必要があります。

QWidget::setLayout()も参照してください 。

bool QLayout::activate()

必要に応じて、parentWidget() のレイアウトを再実行します。

通常、この関数を呼び出す必要はありません。最適なタイミングで自動的に呼び出されるためです。レイアウトが再実行された場合は true を返します。

update() およびQWidget::updateGeometry()も参照してください 。

[protected] void QLayout::addChildLayout(QLayout *childLayout)

この関数は、サブクラス内のaddLayout() またはinsertLayout() 関数から呼び出され、レイアウトchildLayout をサブレイアウトとして追加します。

これを直接呼び出す必要があるのは、ネストされたレイアウトをサポートするカスタムレイアウトを実装する場合のみです。

QBoxLayout::addLayout()、QBoxLayout::insertLayout()、およびQGridLayout::addLayout()も参照してください 。

[protected] void QLayout::addChildWidget(QWidget *w)

この関数は、サブクラスのaddWidget() 関数から呼び出され、w をレイアウトの管理対象ウィジェットとして追加します。

w がすでにレイアウトによって管理されている場合、この関数は警告を出力し、そのレイアウトからw を削除します。したがって、この関数は、w をレイアウトのデータ構造に追加する前に呼び出す必要があります。

[pure virtual] void QLayout::addItem(QLayoutItem *item)

item を追加するためにサブクラスで実装されます。追加方法は各サブクラスごとに異なります。

この関数は通常、アプリケーションコード内では呼び出されません。ウィジェットをレイアウトに追加するには、addWidget() 関数を使用します。子レイアウトを追加するには、関連するQLayout サブクラスが提供する addLayout() 関数を使用します。

注:`item ` の所有権はレイアウトに移管され、その削除はレイアウトの責任となります。

関連項目: addWidget()、QBoxLayout::addLayout()、およびQGridLayout::addLayout()。

void QLayout::addWidget(QWidget *w)

このレイアウトに、そのレイアウト固有の方法でウィジェット `w ` を追加します。この関数は `addItem()` を使用します。

[protected] QRect QLayout::alignmentRect(const QRect &r) const

このレイアウトが `r` に設定された際に覆われるべき矩形を返します。ただし、このレイアウトが `setAlignment()` をサポートしている場合に限ります。

結果は、sizeHint() およびexpandingDirections() から導出されます。この矩形は、r を超えることは決してありません。

[override virtual protected] void QLayout::childEvent(QChildEvent *e)

QObject::childEvent(QChildEvent *event) を再実装します。

[static] QSize QLayout::closestAcceptableSize(const QWidget *widget, const QSize &size)

widget に対するすべてのサイズ制約(heightForWidth() を含む)を満たし、かつsize に可能な限り近いサイズを返します。

QMargins QLayout::contentsMargins() const

レイアウトの周囲に使用されている余白を返します。

デフォルトでは、QLayout はスタイルで指定された値を使用します。ほとんどのプラットフォームでは、マージンは全方向で11ピクセルです。

注: プロパティ contentsMarginsのゲッター 関数です。

setContentsMargins()も参照してください 。

QRect QLayout::contentsRect() const

レイアウトの `geometry()` 矩形を返しますが、コンテンツのマージンも考慮に入れます。

setContentsMargins() およびgetContentsMargins()も参照してください 。

[override virtual] QSizePolicy::ControlTypes QLayout::controlTypes() const

QLayoutItem::controlTypes() const を再実装します。

[pure virtual] int QLayout::count() const

レイアウト内の項目の数を返すために、サブクラスで実装する必要があります。

itemAt()も参照してください 。

[override virtual] Qt::Orientations QLayout::expandingDirections() const

QLayoutItem::expandingDirections() const の再実装です。

このレイアウトが `sizeHint()` よりも多くのスペースを利用できるかどうかを返します。値が `Qt::Vertical ` または `Qt::Horizontal ` の場合は、1 次元のみの拡張を意味し、`Qt::Vertical ` または `Qt::Horizontal ` の場合は、両方の次元での拡張を意味します。

デフォルトの実装では、Qt::Horizontal |Qt::Vertical が返されます。サブクラスは、子ウィジェットのsize policies に基づいて意味のある値を返すよう、これを再実装します。

sizeHint()も参照してください 。

[override virtual] QRect QLayout::geometry() const

QLayoutItem::geometry() const を再実装します。

setGeometry()も参照してください 。

void QLayout::getContentsMargins(int *left, int *top, int *right, int *bottom) const

left 、top 、right 、およびbottom のうち、nullptr ではない各項目について、ポインタが指す場所に、指定されたマージンのサイズを格納します。

デフォルトでは、QLayout はスタイルで指定された値を使用します。ほとんどのプラットフォームでは、マージンは全方向で11ピクセルです。

関連項目: setContentsMargins()、QStyle::pixelMetric()、PM_LayoutLeftMargin 、PM_LayoutTopMargin 、PM_LayoutRightMargin 、およびPM_LayoutBottomMargin 。

[virtual] int QLayout::indexOf(const QLayoutItem *layoutItem) const

このレイアウト(子レイアウトは含まない)内で、レイアウト項目「layoutItem 」を検索します。

layoutItem のインデックスを返します。layoutItem が見つからない場合は-1を返します。

[virtual] int QLayout::indexOf(const QWidget *widget) const

このレイアウト内(子レイアウトを除く)で、ウィジェット「widget 」を検索します。

widget のインデックスを返します。widget が見つからない場合は -1 を返します。

デフォルトの実装では、itemAt() を使用してすべての項目を順に処理します。

[override virtual] void QLayout::invalidate()

QLayoutItem::invalidate() を再実装します。

[override virtual] bool QLayout::isEmpty() const

QLayoutItem::isEmpty() const を再実装します。

bool QLayout::isEnabled() const

レイアウトが有効な場合は `true ` を返し、そうでない場合は `false` を返します。

setEnabled()も参照してください 。

[pure virtual] QLayoutItem *QLayout::itemAt(int index) const

index にあるレイアウト項目を返すために、サブクラスで実装する必要があります。該当する項目がない場合、この関数はnullptr を返す必要があります。項目の番号は 0 から連続して振られます。項目が削除されると、他の項目の番号が再割り当てされます。

この関数を使用すると、レイアウトを反復処理できます。以下のコードは、ウィジェットのレイアウト構造内の各レイアウト項目に対して矩形を描画します。

static void paintLayout(QPainter *painter, QLayoutItem *item)
{
    QLayout *layout = item->layout();
    if (layout) {
        for (int i = 0; i < layout->count(); ++i)
            paintLayout(painter, layout->itemAt(i));
    }
    painter->drawRect(item->geometry());
}

void MyWidget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    if (layout())
        paintLayout(&painter, layout());
}

count() およびtakeAt()も参照してください 。

[override virtual] QLayout *QLayout::layout()

QLayoutItem::layout() を再実装します。

[override virtual] QSize QLayout::maximumSize() const

QLayoutItem::maximumSize() const を再実装します。

このレイアウトの最大サイズを返します。これは、仕様を遵守したまま、レイアウトが持つことのできる最大のサイズです。

返される値には、QWidget::setContentsMargins() やmenuBar() で必要となるスペースは含まれていません。

デフォルトの実装では、サイズ変更に制限はありません。

このレイアウトに設定されているメニューバーを返します。メニューバーが設定されていない場合は、nullptr を返します。

setMenuBar()も参照してください 。

[override virtual] QSize QLayout::minimumSize() const

QLayoutItem::minimumSize() const を再実装します。

このレイアウトの最小サイズを返します。これは、仕様を遵守したままレイアウトが持つことのできる最小のサイズです。

返される値には、QWidget::setContentsMargins() またはmenuBar() に必要なスペースは含まれません。

デフォルトの実装では、サイズ変更に制限はありません。

QWidget *QLayout::parentWidget() const

このレイアウトの親ウィジェットを返します。このレイアウトがいずれのウィジェットにもインストールされていない場合は、nullptr を返します。

レイアウトがサブレイアウトである場合、この関数は親レイアウトの親ウィジェットを返します。

parent()も参照してください 。

void QLayout::removeItem(QLayoutItem *item)

レイアウトからレイアウト項目「item 」を削除します。項目の削除は呼び出し側の責任となります。

なお、item はレイアウトである可能性があります(QLayout はQLayoutItem を継承しているため)。

removeWidget() およびaddItem()も参照してください 。

void QLayout::removeWidget(QWidget *widget)

レイアウトからウィジェット `widget ` を削除します。この呼び出しの後、ウィジェットに適切なジオメトリを指定するか、ウィジェットをレイアウトに戻すか、必要に応じて明示的に非表示にするかは、呼び出し側の責任となります。

注: widget の所有権は、追加されたときと同じままです。

関連項目: removeItem()、QWidget::setGeometry()、addWidget()も参照してください 。

[virtual] QLayoutItem *QLayout::replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively)

ウィジェット `from ` を検索し、見つかった場合はウィジェット `to ` に置き換えます。成功した場合は、ウィジェット `from ` を含むレイアウト項目を返します。そうでない場合は `nullptr ` が返されます。options に `Qt::FindChildrenRecursively `(デフォルト)が含まれている場合、置換を行うためにサブレイアウトが検索されます。options 内のその他のフラグは無視されます。

したがって、返されるアイテムはこのレイアウトに属しているのではなく、サブレイアウトに属している可能性があることに注意してください。

返されたレイアウト項目は、もはやそのレイアウトによって所有されていないため、削除するか、別のレイアウトに挿入する必要があります。ウィジェットfrom は、もはやそのレイアウトによって管理されていないため、削除または非表示にする必要がある場合があります。ウィジェットfrom の親は変更されません。

この関数は、組み込みの Qt レイアウトでは動作しますが、カスタムレイアウトでは動作しない場合があります。

indexOf()も参照してください 。

bool QLayout::setAlignment(QWidget *w, Qt::Alignment alignment)

ウィジェット `w ` の配置を `alignment ` に設定し、このレイアウト(子レイアウトを除く)内に `w ` が見つかった場合は `true` を返し、見つからない場合は `false` を返します。

bool QLayout::setAlignment(QLayout *l, Qt::Alignment alignment)

レイアウト `l ` の配置を `alignment ` に設定し、このレイアウト(子レイアウトは含まない)内で `l ` が見つかった場合は `true ` を返し、そうでない場合は `false` を返します。

これはオーバーロードされた関数です。

void QLayout::setContentsMargins(const QMargins &margins)

レイアウトの周囲に適用するmargins を設定します。

デフォルトでは、QLayout はスタイルで指定された値を使用します。ほとんどのプラットフォームでは、全方向に 11 ピクセルのマージンが設定されます。

注: プロパティ `contentsMargins`のセッター 関数です。

contentsMargins()も参照してください 。

void QLayout::setContentsMargins(int left, int top, int right, int bottom)

レイアウトの周囲に適用するleft 、top 、right 、およびbottom のマージンを設定します。

デフォルトでは、QLayout はスタイルで指定された値を使用します。ほとんどのプラットフォームでは、マージンは全方向に 11 ピクセルです。

注: プロパティ `contentsMargins`のセッター 関数です。

関連項目: getContentsMargins()、QStyle::pixelMetric()、PM_LayoutLeftMargin 、PM_LayoutTopMargin 、PM_LayoutRightMargin 、およびPM_LayoutBottomMargin 。

void QLayout::setEnabled(bool enable)

enable がtrueの場合、このレイアウトを有効にし、そうでない場合は無効にします。

有効なレイアウトは変更に応じて動的に調整されますが、無効なレイアウトは存在しないかのように振る舞います。

デフォルトでは、すべてのレイアウトが有効になっています。

isEnabled()も参照してください 。

[override virtual] void QLayout::setGeometry(const QRect &r)

QLayoutItem::setGeometry(const QRect &r) を再実装します。

geometry()も参照してください 。

void QLayout::setMenuBar(QWidget *widget)

ジオメトリマネージャに対し、メニューバー `widget ` を `parentWidget()` の上部、`QWidget::contentsMargins()` の外側に配置するよう指示します。すべての子ウィジェットは、メニューバーの下端より下に配置されます。

menuBar()も参照してください 。

[since 6.10] void QLayout::setSizeConstraints(QLayout::SizeConstraint horizontal, QLayout::SizeConstraint vertical)

horizontal とvertical の両方のサイズ制約を設定します。

この関数は Qt 6.10 で導入されました。

sizeConstraint()、horizontalSizeConstraint()、およびverticalSizeConstraint()も参照してください 。

[pure virtual] QLayoutItem *QLayout::takeAt(int index)

index にあるレイアウト項目をレイアウトから削除し、その項目を返すために、サブクラスで実装する必要があります。該当する項目がない場合、この関数は何もしないで 0 を返す必要があります。項目には 0 から連番が割り当てられます。項目が削除されると、他の項目の番号が再割り当てされます。

以下のコード断片は、レイアウトからすべての項目を安全に削除する方法を示しています:

QLayoutItem *child;
while ((child = layout->takeAt(0)) != nullptr) {
    ...
    delete child->widget(); // delete the widget
    delete child;   // delete the layout item
}

itemAt() およびcount()も参照してください 。

[since 6.1] void QLayout::unsetContentsMargins()

レイアウトの周囲に設定されたユーザー定義の余白をすべて解除します。レイアウトには、スタイルで指定されたデフォルト値が適用されます。

注: contentsMargins プロパティのリセッター 関数です。

この関数は Qt 6.1 で導入されました。

setContentsMargins()も参照してください 。

void QLayout::update()

parentWidget() のレイアウトを更新します。

通常、この関数を呼び出す必要はありません。最も適切なタイミングで自動的に呼び出されるためです。

activate() およびinvalidate()も参照してください 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.