QLayout Class
QLayoutクラスはジオメトリ・マネージャの基本クラスです。詳細...
ヘッダー | #include <QLayout> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
を継承する: | QObject そしてQLayoutItem |
によって継承される: |
パブリック型
enum | SizeConstraint { SetDefaultConstraint, SetFixedSize, SetMinimumSize, SetMaximumSize, SetMinAndMaxSize, SetNoConstraint } |
プロパティ
- sizeConstraint : SizeConstraint
- spacing : int
パブリック関数
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::SetDefaultConstraint | 0 | メイン・ウィジェットの最小サイズは、ウィジェットが既に最小サイズを持っていない限り、minimumSize() に設定されます。 |
QLayout::SetFixedSize | 3 | メイン・ウィジェットのサイズは、sizeHint() に設定されます。 |
QLayout::SetMinimumSize | 2 | メイン・ウィジェットの最小サイズはminimumSize() に設定される。 |
QLayout::SetMaximumSize | 4 | メイン・ウィジェットの最大サイズはmaximumSize() に設定され、これより大きくすることはできない。 |
QLayout::SetMinAndMaxSize | 5 | メイン・ウィジェットの最小サイズはminimumSize() に設定され、最大サイズはmaximumSize() に設定される。 |
QLayout::SetNoConstraint | 1 | ウィジェットに制約はありません。 |
setSizeConstraint()も参照してください 。
プロパティ・ドキュメント
sizeConstraint : SizeConstraint
このプロパティは、レイアウトのリサイズモードを保持します。
デフォルトのモードはSetDefaultConstraint です。
アクセス関数です:
QLayout::SizeConstraint | sizeConstraint() const |
void | setSizeConstraint(QLayout::SizeConstraint) |
spacing : int
このプロパティは、レイアウト内のウィジェット間の間隔を保持します。
値が明示的に設定されていない場合、レイアウトのスペーシングは親レイアウト、または親ウィジェットのスタイル設定から継承されます。
QGridLayout とQFormLayout については、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() によって返されます。
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)
この関数は、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_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()); }
[override virtual]
QLayout *QLayout::layout()
再インプリメント:QLayoutItem::layout().
[override virtual]
QSize QLayout::maximumSize() const
再実装:QLayoutItem::maximumSize() const.
このレイアウトの最大サイズを返します。これは、仕様に従いつつレイアウトが持ちうる最大のサイズです。
返される値には、QWidget::setContentsMargins() やmenuBar() が必要とするスペースは含まれません。
デフォルトの実装では、サイズ変更は無制限です。
QWidget *QLayout::menuBar() const
このレイアウトに設定されているメニューバーを返し、メニューバーが設定されていない場合は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 をレイアウトから削除します。アイテムを削除するのは呼び出し側の責任です。
QLayout はQLayoutItem を継承しているため、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 を含むレイアウトアイテムを返します。そうでない場合は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()も参照してください 。
[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 }
[since 6.1]
void QLayout::unsetContentsMargins()
レイアウト周辺のユーザー定義の余白を設定解除します。レイアウトは、スタイルによって提供されるデフォルト値を使用します。
注: contentsMargins プロパティ用のリセッター関数です。
この関数は Qt 6.1 で導入されました。
setContentsMargins()も参照してください 。
void QLayout::update()
parentWidget()のレイアウトを更新する。
最適なタイミングで自動的に呼び出されるため、通常はこれを呼び出す必要はありません。
activate() およびinvalidate()も参照 。
© 2025 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.