QLayout Class

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

Header: #include <QLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Inherits: QObject and QLayoutItem
Inherited By:

QBoxLayout, QFormLayout, QGridLayout, and 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
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 setMenuBar(QWidget *widget)
void setSizeConstraint(QLayout::SizeConstraint)
virtual void setSpacing(int)
QLayout::SizeConstraint sizeConstraint() const
virtual int spacing() const
virtual QLayoutItem *takeAt(int index) = 0
(since 6.1) void unsetContentsMargins()
void update()

再実装パブリック関数

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)

保護された関数

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() を実装します。カスタムレイアウトマネージャの実装の詳細については、フローレイアウトの例を参照してください。

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

QLayoutItemレイアウト管理基本レイアウト例フローレイアウト例も参照してください

メンバ タイプ ドキュメント

enum QLayout::SizeConstraint

取り得る値

定数説明
QLayout::SetDefaultConstraint0メインウィジェットの最小サイズはminimumSize() に設定されます。
QLayout::SetFixedSize3メイン・ウィジェットのサイズは、sizeHint() に設定されます。
QLayout::SetMinimumSize2メイン・ウィジェットの最小サイズはminimumSize() に設定される。
QLayout::SetMaximumSize4メイン・ウィジェットの最大サイズはmaximumSize() に設定され、これより大きくすることはできない。
QLayout::SetMinAndMaxSize5メイン・ウィジェットの最小サイズはminimumSize() に設定され、最大サイズはmaximumSize() に設定される。
QLayout::SetNoConstraint1ウィジェットに制約はありません。

setSizeConstraint()も参照してください

プロパティの説明

sizeConstraint : SizeConstraint

このプロパティは、レイアウトのリサイズモードを保持します。

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

アクセス関数です:

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

spacing : int

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

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

QGridLayoutQFormLayout では、setHorizontalSpacing() とsetVerticalSpacing() を使用して、異なる水平方向と垂直方向の間隔を設定できます。その場合、spacing()は-1を返します。

アクセス関数:

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

contentsRect(),getContentsMargins(),QStyle::layoutSpacing(),QStyle::pixelMetric()も参照

メンバ関数ドキュメント

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

新しいトップレベルQLayoutを構築します。親はparent です。

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

parentnullptr の場合、このレイアウトを別のレイアウトに挿入するか、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)

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

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

このレイアウトがsetAlignment() をサポートしている場合に限り、このレイアウトのジオメトリがr に設定されたときにカバーされるべき矩形を返します。

この結果は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)

heightForWidth() を含むwidget のすべてのサイズ制約を満たし、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 の場合は 2 次元とも大きくしたいことを意味します。

デフォルトの実装は、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_LayoutLeftMarginPM_LayoutTopMarginPM_LayoutRightMarginPM_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 を削除します。アイテムの削除は呼び出し側の責任です。

QLayoutQLayoutItem を継承するので、item はレイアウトになり得ます。

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 を含むレイアウトアイテムを返します。そうでない場合はnullptroptionsQt::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_LayoutLeftMarginPM_LayoutTopMarginPM_LayoutRightMarginPM_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)

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

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

[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() も参照して ください。

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