QGraphicsAnchorLayout Class
QGraphicsAnchorLayout クラスは、Graphics View 内でウィジェット同士をアンカーで固定できるレイアウトを提供します。詳細...
| ヘッダー: | #include <QGraphicsAnchorLayout> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 継承元: | QGraphicsLayout |
パブリック関数
| QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr) | |
| virtual | ~QGraphicsAnchorLayout() |
| QGraphicsAnchor * | addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge) |
| void | addAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical) |
| void | addCornerAnchors(QGraphicsLayoutItem *firstItem, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem, Qt::Corner secondCorner) |
| QGraphicsAnchor * | anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge) |
| qreal | horizontalSpacing() const |
| void | setHorizontalSpacing(qreal spacing) |
| void | setSpacing(qreal spacing) |
| void | setVerticalSpacing(qreal spacing) |
| qreal | verticalSpacing() const |
再実装されたパブリック関数
| virtual int | count() const override |
| virtual void | invalidate() override |
| virtual QGraphicsLayoutItem * | itemAt(int index) const override |
| virtual void | removeAt(int index) override |
| virtual void | setGeometry(const QRectF &geom) override |
再実装されたプロテクト関数
| virtual QSizeF | sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override |
詳細な説明
アンカーレイアウトを使用すると、開発者はウィジェット同士の相対的な配置や、レイアウト自体に対する配置を指定できます。この指定は、addAnchor()、addAnchors()、またはaddCornerAnchors() を呼び出して、レイアウトにアンカーを追加することで行います。
レイアウト内の既存のアンカーには、anchor() 関数を使用してアクセスできます。アンカーが設定されたアイテムは自動的にレイアウトに追加され、アイテムが削除されると、そのアイテムに関連付けられたすべてのアンカーも自動的に削除されます。

アンカーレイアウトを使用して、単純な色付きウィジェットを配置する。
アンカーは常に項目のエッジ間に設定され、この際「中央」もエッジとみなされます。次の例を考えてみましょう。
layout->addAnchor(b, Qt::AnchorLeft, a, Qt::AnchorRight);
layout->addAnchor(b, Qt::AnchorTop, a, Qt::AnchorBottom);ここでは、アイテムa の右端がアイテムb の左端に、アイテムa の下端がアイテムb の上端にアンカー設定されており、その結果、アイテムb はアイテムb の右下斜め位置に配置されます。
addCornerAnchors() 関数を使用すると、上記のコードで示されているようにaddAnchor() を個別に 2 回呼び出すよりも、2 つのウィジェットの角をアンカーで固定する作業が簡単になります。ここでは、ウィジェットを囲むレイアウトの左上隅にアンカーで固定する方法を示します。
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);アンカーを使用してウィジェットの幅や高さを合わせる場合、addAnchors() 関数を使用すると便利です。アンカーを指定するための他の関数と同様に、この関数もウィジェットをレイアウトに固定するために使用できます。
アンカーレイアウトにおけるサイズヒントとサイズポリシー
QGraphicsAnchorLayoutは、各アイテムのサイズヒントとサイズポリシーを尊重します。なお、QSizePolicy のプロパティの中には、not respected であるものがあることに注意してください。
アンカーレイアウト内の間隔
レイアウトは、アイテム間に余白を配分する場合があります。余白が明示的に指定されていない場合、実際の余白量は通常 0 になります。
ただし、最初のエッジが 2 番目のエッジと反対方向にある場合(たとえば、最初のウィジェットの右エッジが 2 番目のウィジェットの左エッジにアンカーされている場合)、アンカーのサイズは、ピクセル単位のメトリックを通じてスタイルから照会されます。水平アンカーの場合は `PM_LayoutHorizontalSpacing `、垂直アンカーの場合は `PM_LayoutVerticalSpacing ` です。
間隔が負の場合、アイテムはある程度重なり合います。
既知の問題
QGraphicsAnchorLayout では現在、サポートされていない機能がいくつかあります。将来的に変更される可能性があるため、将来の動作の退行を避けたい場合は、これらの機能の使用を避けてください:
- ストレッチ係数が反映されません。
- QSizePolicy::ExpandFlag は反映されません。
- 幅に対する高さの指定が反映されません。
関連項目: QGraphicsLinearLayout 、QGraphicsGridLayout 、およびQGraphicsLayout 。
メンバ関数のドキュメント
QGraphicsAnchorLayout::QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr)
QGraphicsAnchorLayout のインスタンスを作成します。parent がQGraphicsLayout のコンストラクタに渡されます。
[virtual noexcept] QGraphicsAnchorLayout::~QGraphicsAnchorLayout()
QGraphicsAnchorLayout オブジェクトを破棄します。
QGraphicsAnchor *QGraphicsAnchorLayout::addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
アイテムfirstItem のエッジfirstEdge と、アイテムsecondItem のエッジsecondEdge の間にアンカーを作成します。アンカーの間隔はスタイルから取得されます。レイアウトのエッジとアイテムのエッジの間のアンカーのサイズは 0 になります。エッジの間にすでにアンカーが存在する場合、新しいアンカーが古いアンカーに置き換わります。
firstItem また、secondItem は、レイアウトの一部でない場合、自動的にレイアウトに追加されます。つまり、count()の値は最大で2増加する可能性があります。
アンカーに割り当てられる間隔は、アンカーの種類によって異なります。例えば、あるアイテムの右端から別のアイテムの左端(またはその逆)へのアンカーには、デフォルトの水平間隔が適用されます。この挙動は、下端から上端へのアンカーにも同様に適用されます(ただし、この場合はデフォルトの垂直間隔が使用されます)。 それ以外のすべてのアンカーの組み合わせでは、間隔は0になります。すべてのアンカー指定関数はこのルールに従います。
また、QGraphicsAnchor::setSpacing() メソッドを使用することで、間隔を手動で設定することも可能です。
firstItem またはsecondItem がレイアウトの親要素である場合にこの関数を呼び出すと、未定義の挙動となります。
addAnchors() およびaddCornerAnchors()も参照してください 。
void QGraphicsAnchorLayout::addAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical)
firstItem の2つまたは4つの辺を、secondItem の対応する辺に固定し、その結果、firstItem が、orientations で指定された寸法において、secondItem と同じサイズになるようにします。
たとえば、次の例では、2つの項目の幅が一致するように、左右の端を固定しています:
layout->addAnchor(b, Qt::AnchorLeft, c, Qt::AnchorLeft);
layout->addAnchor(b, Qt::AnchorRight, c, Qt::AnchorRight);これは、次の1行のコードを使用しても実現できます:
layout->addAnchors(b, c, Qt::Horizontal);addAnchor() およびaddCornerAnchors()も参照してください 。
void QGraphicsAnchorLayout::addCornerAnchors(QGraphicsLayoutItem *firstItem, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem, Qt::Corner secondCorner)
firstItem とsecondItem の間に、角点firstCorner とsecondCorner で指定される 2 つのアンカーを作成します。1 つは水平エッジ用、もう 1 つは垂直エッジ用です。
これは、角へのアンカー設定を2つの辺へのアンカー設定として表現できるため、便利な関数です。例えば:
layout->addAnchor(a, Qt::AnchorTop, layout, Qt::AnchorTop);
layout->addAnchor(a, Qt::AnchorLeft, layout, Qt::AnchorLeft);これは、次の1行のコードでも実現できます:
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);エッジのペアの間にすでにアンカーが存在する場合、そのアンカーはこの関数が指定するアンカーに置き換えられます。
firstItem また、secondItem は、レイアウトに含まれていない場合、自動的にレイアウトに追加されます。つまり、count()の値は最大で2増加する可能性があります。
addAnchor() およびaddAnchors()も参照してください 。
QGraphicsAnchor *QGraphicsAnchorLayout::anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
firstItem 、firstEdge 、secondItem 、secondEdge で定義されたアンカーポイント間のアンカーを返します。該当するアンカーが存在しない場合、この関数は 0 を返します。
[override virtual] int QGraphicsAnchorLayout::count() const
QGraphicsLayout::count() const を再実装します。
qreal QGraphicsAnchorLayout::horizontalSpacing() const
アンカーレイアウトのデフォルトの水平間隔を返します。
verticalSpacing() およびsetHorizontalSpacing()も参照してください 。
[override virtual] void QGraphicsAnchorLayout::invalidate()
QGraphicsLayout::invalidate() を再実装します。
[override virtual] QGraphicsLayoutItem *QGraphicsAnchorLayout::itemAt(int index) const
QGraphicsLayout::itemAt(int i) const を再実装します。
[override virtual] void QGraphicsAnchorLayout::removeAt(int index)
QGraphicsLayout::removeAt(int index) を再実装します。
index にあるレイアウト項目を、破棄することなく削除します。項目の所有権は呼び出し元に譲渡されます。
アイテムを削除すると、それに関連付けられているアンカーもすべて削除されます。
itemAt() およびcount()も参照してください 。
[override virtual] void QGraphicsAnchorLayout::setGeometry(const QRectF &geom)
QGraphicsLayoutItem::setGeometry(const QRectF &rect) を再実装します。
void QGraphicsAnchorLayout::setHorizontalSpacing(qreal spacing)
アンカーレイアウトのデフォルトの水平間隔を `spacing` に設定します。
horizontalSpacing()、setVerticalSpacing()、およびsetSpacing()も参照してください 。
void QGraphicsAnchorLayout::setSpacing(qreal spacing)
アンカーレイアウトのデフォルトの水平間隔および垂直間隔を「spacing 」に設定します。
アンカーに間隔が指定されていない状態でアイテムがアンカーされた場合、デフォルトの間隔が使用されます。
QGraphicsAnchorLayout 負の余白はサポートされていません。負の値を設定すると、以前の余白設定が解除され、レイアウトは現在のウィジェットスタイルで指定された余白を使用するようになります。
setHorizontalSpacing() およびsetVerticalSpacing()も参照してください 。
void QGraphicsAnchorLayout::setVerticalSpacing(qreal spacing)
アンカーレイアウトのデフォルトの縦方向の間隔を「spacing 」に設定します。
verticalSpacing()、setHorizontalSpacing()、およびsetSpacing()も参照してください 。
[override virtual protected] QSizeF QGraphicsAnchorLayout::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const
QGraphicsLayoutItem::sizeHint (Qt::SizeHint which, const QSizeF &constraint)const を再実装します。
qreal QGraphicsAnchorLayout::verticalSpacing() const
アンカーレイアウトのデフォルトの縦間隔を返します。
horizontalSpacing() およびsetVerticalSpacing()も参照してください 。
© 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.