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: |
パブリックタイプ
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()); }
count() およびtakeAt()も参照してください 。
[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() も参照して ください。
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。