このページでは

QGridLayout Class

QGridLayout クラスは、ウィジェットをグリッド状に配置します。詳細...

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

プロパティ

パブリック関数

QGridLayout(QWidget *parent = nullptr)
virtual ~QGridLayout()
void addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment())
void addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
void addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
QRect cellRect(int row, int column) const
int columnCount() const
int columnMinimumWidth(int column) const
int columnStretch(int column) const
void getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const
int horizontalSpacing() const
QLayoutItem *itemAtPosition(int row, int column) const
Qt::Corner originCorner() const
int rowCount() const
int rowMinimumHeight(int row) const
int rowStretch(int row) const
void setColumnMinimumWidth(int column, int minSize)
void setColumnStretch(int column, int stretch)
void setHorizontalSpacing(int spacing)
void setOriginCorner(Qt::Corner corner)
void setRowMinimumHeight(int row, int minSize)
void setRowStretch(int row, int stretch)
void setVerticalSpacing(int spacing)
int verticalSpacing() const

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

virtual int count() const override
virtual Qt::Orientations expandingDirections() const override
virtual bool hasHeightForWidth() const override
virtual int heightForWidth(int w) const override
virtual void invalidate() override
virtual QLayoutItem *itemAt(int index) const override
virtual QSize maximumSize() const override
virtual int minimumHeightForWidth(int w) const override
virtual QSize minimumSize() const override
virtual void setGeometry(const QRect &rect) override
virtual void setSpacing(int spacing) override
virtual QSize sizeHint() const override
virtual int spacing() const override
virtual QLayoutItem *takeAt(int index) override

再実装されたプロテクト関数

virtual void addItem(QLayoutItem *item) override

詳細な説明

QGridLayout は、親レイアウトまたは `parentWidget()` によって割り当てられたスペースを、行と列に分割し、管理する各ウィジェットを適切なセルに配置します。

列と行の挙動は同一です。ここでは列について説明しますが、行についても同等の関数が用意されています。

各列には、最小幅と伸縮係数があります。最小幅は、setColumnMinimumWidth() で設定された値と、その列内の各ウィジェットの最小幅のうち、最大の値となります。伸縮係数はsetColumnStretch() を使用して設定され、必要な最小幅を超えて、その列が利用可能なスペースのどの程度を確保するかを決定します。

通常、各管理対象ウィジェットやレイアウトは、addWidget() を使用して独自のセルに配置されます。また、addItem() およびaddWidget() の行および列をまたぐオーバーロードを使用することで、1つのウィジェットが複数のセルを占有することも可能です。 これを行うと、QGridLayoutは(ストレッチ係数に基づいて)列や行にサイズをどのように配分するかを推測します。

レイアウトからウィジェットを削除するには、removeWidget() を呼び出します。また、ウィジェットに対してQWidget::hide() を呼び出すと、QWidget::show() が呼び出されるまで、そのウィジェットは事実上レイアウトから削除された状態になります。

この図は、5列3行のグリッドを持つダイアログの断片を示しています(グリッドはマゼンタ色で重ねて表示されています):

グリッドレイアウト

このダイアログの断片における0、2、4列目は、それぞれQLabel 、QLineEdit 、QListBoxで構成されています。1列目と3列目は、setColumnMinimumWidth()で作成されたプレースホルダーです。0行目は3つのQLabel オブジェクト、1行目は3つのQLineEdit オブジェクト、2行目は3つのQListBoxオブジェクトで構成されています。 列間のスペースを適切に確保するために、プレースホルダー列(1列目と3列目)を使用しました。

列や行の幅や高さは均等ではないことに注意してください。2つの列の幅を同じにしたい場合は、それらの最小幅と伸縮係数を自分で同じに設定する必要があります。これを行うには、setColumnMinimumWidth() およびsetColumnStretch() を使用します。

QGridLayoutが最上位のレイアウトではない場合(つまり、ウィジェットの領域や子要素のすべてを管理していない場合)、その作成時に、何か操作を行う前に、親レイアウトに追加する必要があります。レイアウトを追加する一般的な方法は、親レイアウトに対してaddLayout()を呼び出すことです。

レイアウトを追加したら、addWidget()、addItem()、およびaddLayout() を使用して、グリッドレイアウトのセルにウィジェットや他のレイアウトを配置し始めることができます。

QGridLayout には、contents margin とspacing() という 2 種類のマージン幅があります。contents margin は、QGridLayout の 4 辺それぞれに沿って確保されるスペースの幅です。spacing() は、隣接するボックス間に自動的に割り当てられる間隔の幅です。

コンテンツマージンのデフォルト値は、style によって指定されます。Qtスタイルで指定されるデフォルト値は、子ウィジェットの場合は9、ウィンドウの場合は11です。間隔のデフォルト値は、トップレベルのレイアウトのマージン幅と同じか、親レイアウトと同じになります。

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

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

horizontalSpacing : int

このプロパティは、並べて配置されたウィジェット間の間隔を指定します

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

アクセス関数:

int horizontalSpacing() const
void setHorizontalSpacing(int spacing)

関連項目: verticalSpacing 、QStyle::pixelMetric()、およびPM_LayoutHorizontalSpacing 。

verticalSpacing : int

このプロパティは、互いに重なり合って配置されたウィジェット間の間隔を指定します。

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

アクセス関数:

int verticalSpacing() const
void setVerticalSpacing(int spacing)

関連項目: horizontalSpacing 、QStyle::pixelMetric()、およびPM_LayoutHorizontalSpacing 。

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

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

親ウィジェットである `parent` を使用して、新しい `QGridLayout` を作成します。このレイアウトは初期状態では行が 1 つ、列が 1 つですが、新しい項目が挿入されると拡張されます。

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

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

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

[virtual noexcept] QGridLayout::~QGridLayout()

グリッドレイアウトを破棄します。これが最上位のグリッドである場合、ジオメトリ管理は終了します。

レイアウト内のウィジェットは破棄されません。

[override virtual protected] void QGridLayout::addItem(QLayoutItem *item)

QLayout::addItem(QLayoutItem *item) を再実装します。

void QGridLayout::addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment())

位置row 、column にitem を追加し、行数rowSpan 、列数columnSpan にわたり、alignment に従って配置します。rowSpan および/またはcolumnSpan が-1の場合、そのアイテムはそれぞれ下端および/または右端まで伸びます。このレイアウトはitem の所有権を取得します。

警告: この関数を使用して、子レイアウトや子ウィジェットアイテムを追加しないでください 。代わりに、addLayout() またはaddWidget() を使用してください。

void QGridLayout::addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())

layout をグリッド上の座標 (row,column) に配置します。左上の座標は (0, 0) です。

配置は `alignment` で指定されます。デフォルトの配置は 0 で、これはウィジェットがセル全体を埋めることを意味します。

0 以外のアライメントを指定すると、レイアウトは利用可能なスペースを埋めるように拡大せず、sizeHint() に基づいてサイズが調整されます。

layout はグリッドレイアウトの子要素となります。

void QGridLayout::addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

このバージョンでは、セルグリッドにlayout というレイアウトが追加され、複数の行・列にまたがるようになりました。セルはrow 、column から始まり、rowSpan 行とcolumnSpan 列にまたがります。

rowSpan および/またはcolumnSpan が -1 の場合、レイアウトはそれぞれ下端および/または右端まで拡張されます。

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

void QGridLayout::addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())

指定されたwidget を、row 、column にあるセルグリッドに追加します。デフォルトでは、左上の位置は(0, 0)です。

配置はalignment で指定されます。デフォルトの配置は0であり、これはウィジェットがセル全体を埋めることを意味します。

void QGridLayout::addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

このバージョンでは、指定されたwidget をセルグリッドに追加し、複数の行・列にまたがるようにします。セルはfromRow 、fromColumn を起点とし、rowSpan 行とcolumnSpan 列にまたがります。widget には、指定されたalignment が設定されます。

rowSpan および/またはcolumnSpan が-1の場合、ウィジェットはそれぞれ下端および右端まで拡張されます。

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

QRect QGridLayout::cellRect(int row, int column) const

グリッド内の行row 、列column にあるセルのジオメトリを返します。row またはcolumn がグリッドの範囲外にある場合、無効な矩形が返されます。

警告: 現在のバージョンの Qtでは 、setGeometry() が呼び出されるまで、つまりparentWidget() が可視状態になるまでは、この関数は有効な結果を返しません。

int QGridLayout::columnCount() const

このグリッドの列数を返します。

int QGridLayout::columnMinimumWidth(int column) const

列column の列間隔を返します。

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

int QGridLayout::columnStretch(int column) const

列column のストレッチ係数を返します。

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

[override virtual] int QGridLayout::count() const

QLayout::count() const を再実装します。

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

QLayout::expandingDirections() const を再実装します。

void QGridLayout::getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const

指定されたindex を持つアイテムの位置情報を返します。

row およびcolumn として渡された変数には、レイアウト内でのアイテムの位置が設定され、rowSpan およびcolumnSpan 変数には、アイテムの垂直方向および水平方向のスパンが設定されます。

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

[override virtual] bool QGridLayout::hasHeightForWidth() const

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

[override virtual] int QGridLayout::heightForWidth(int w) const

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

[override virtual] void QGridLayout::invalidate()

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

[override virtual] QLayoutItem *QGridLayout::itemAt(int index) const

QLayout::itemAt(int index) const を再実装します。

QLayoutItem *QGridLayout::itemAtPosition(int row, int column) const

セル (row 、column) を占有するレイアウト項目を返します。セルが空の場合は、nullptr を返します。

getItemPosition() およびindexOf()も参照してください 。

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

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

[override virtual] int QGridLayout::minimumHeightForWidth(int w) const

QLayoutItem::minimumHeightForWidth(int w) const の再実装。

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

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

Qt::Corner QGridLayout::originCorner() const

グリッドの原点、すなわち座標 (0, 0) として使用される角を返します。

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

int QGridLayout::rowCount() const

このグリッドの行数を返します。

int QGridLayout::rowMinimumHeight(int row) const

行row に設定されている最小幅を返します。

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

int QGridLayout::rowStretch(int row) const

行row のストレッチ係数を返します。

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

void QGridLayout::setColumnMinimumWidth(int column, int minSize)

列「column 」の最小幅を「minSize 」ピクセルに設定します。

columnMinimumWidth() およびsetRowMinimumHeight()も参照してください 。

void QGridLayout::setColumnStretch(int column, int stretch)

列column のストレッチ係数をstretch に設定します。最初の列は番号0です。

ストレッチ係数は、このグリッド内の他の列に対する相対的な値です。ストレッチ係数の大きい列ほど、利用可能なスペースをより多く占めます。

デフォルトの伸縮係数は 0 です。伸縮係数が 0 であっても、このテーブル内の他の列が一切拡大できない場合、その列は拡大する可能性があります。

別の方法として、addItem() を `QSpacerItem` とともに使用して余白を追加することもできます。

columnStretch() およびsetRowStretch()も参照してください 。

[override virtual] void QGridLayout::setGeometry(const QRect &rect)

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

void QGridLayout::setOriginCorner(Qt::Corner corner)

グリッドの原点(位置 (0, 0))を `corner` に設定します。

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

void QGridLayout::setRowMinimumHeight(int row, int minSize)

行row の最小高さをminSize ピクセルに設定します。

rowMinimumHeight() およびsetColumnMinimumWidth()も参照してください 。

void QGridLayout::setRowStretch(int row, int stretch)

行row のストレッチ係数をstretch に設定します。最初の行は番号0です。

ストレッチ係数は、このグリッド内の他の行に対する相対的な値です。ストレッチ係数の大きい行ほど、利用可能なスペースをより多く占有します。

デフォルトのストレッチ係数は 0 です。ストレッチ係数が 0 であり、このテーブル内の他の行が一切拡大できない場合でも、この行は拡大する可能性があります。

rowStretch()、setRowMinimumHeight()、およびsetColumnStretch()も参照してください 。

[override virtual] void QGridLayout::setSpacing(int spacing)

プロパティ「QLayout::spacing 」のアクセス関数を再実装します。

この関数は、垂直方向および水平方向の間隔の両方を `spacing` に設定します。

spacing()、setVerticalSpacing()、およびsetHorizontalSpacing()も参照してください 。

[override virtual] QSize QGridLayout::sizeHint() const

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

[override virtual] int QGridLayout::spacing() const

プロパティ「QLayout::spacing 」のアクセス関数を再実装します。

垂直方向の間隔が水平方向の間隔と等しい場合、この関数はその値を返します。それ以外の場合は -1 を返します。

setSpacing()、verticalSpacing()、およびhorizontalSpacing()も参照してください 。

[override virtual] QLayoutItem *QGridLayout::takeAt(int index)

QLayout::takeAt(int index) の再実装です。

© 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.