QGraphicsAnchorLayout Class
QGraphicsAnchorLayout 클래스는 그래픽 뷰에서 위젯들을 서로 고정할 수 있는 레이아웃을 제공합니다. 더 보기...
| 헤더: | #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()를 두 번 개별적으로 호출하는 것보다 두 위젯의 모서리를 고정하는 더 간단한 방법을 제공합니다. 여기서는 위젯을 감싸는 레이아웃의 왼쪽 상단 모서리에 고정하는 방법을 살펴보겠습니다:
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);앵커를 사용하여 위젯의 너비나 높이를 맞추는 경우에는 addAnchors() 함수를 사용하는 것이 편리합니다. 앵커를 지정하는 다른 함수들과 마찬가지로, 이 함수도 위젯을 레이아웃에 고정하는 데 사용할 수 있습니다.
앵커 레이아웃의 크기 힌트 및 크기 정책
QGraphicsAnchorLayout은 각 항목의 크기 힌트와 크기 정책을 준수합니다. QSizePolicy 의 일부 속성은 not respected 라는 점에 유의하십시오.
앵커 레이아웃 내의 간격
레이아웃은 항목들 사이에 일정한 간격을 분배할 수 있습니다. 간격이 명시적으로 지정되지 않은 경우, 실제 간격은 대개 0이 됩니다.
그러나 첫 번째 가장자리가 두 번째 가장자리와 반대 방향인 경우(예: 첫 번째 위젯의 오른쪽 가장자리가 두 번째 위젯의 왼쪽 가장자리에 고정된 경우), 앵커의 크기는 픽셀 단위 측정값을 통해 스타일에서 조회됩니다. 가로 앵커의 경우 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 는 레이아웃의 일부가 아닌 경우 레이아웃에 자동으로 추가됩니다. 즉, () 값이 최대 2까지 증가할 수 있습니다. count
앵커에 적용되는 간격은 앵커의 유형에 따라 달라집니다. 예를 들어, 한 항목의 오른쪽 가장자리에서 다른 항목의 왼쪽 가장자리로 연결되는 앵커(또는 그 반대)는 기본 수평 간격을 사용합니다. 하단에서 상단으로 연결되는 앵커에도 동일한 동작이 적용됩니다(단, 이 경우 기본 수직 간격을 사용합니다). 그 외의 모든 앵커 조합에 대해서는 간격이 0이 됩니다. 모든 앵커링 함수는 이 규칙을 따릅니다.
QGraphicsAnchor::setSpacing() 메서드를 사용하여 간격을 수동으로 설정할 수도 있습니다.
firstItem 또는 secondItem 가 레이아웃의 상위 요소인 경우 이 함수를 호출하면 정의되지 않은 동작이 발생합니다.
addAnchors() 및 addCornerAnchors()도 참조하십시오 .
void QGraphicsAnchorLayout::addAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical)
firstItem 의 두 개 또는 네 개의 변을 secondItem 의 해당 변에 고정하여, firstItem 가 orientations 에서 지정한 치수에서 secondItem 와 동일한 크기가 되도록 합니다.
예를 들어, 다음 예제는 두 항목의 왼쪽 및 오른쪽 가장자리를 고정하여 너비가 일치하도록 합니다:
layout->addAnchor(b, Qt::AnchorLeft, c, Qt::AnchorLeft);
layout->addAnchor(b, Qt::AnchorRight, c, Qt::AnchorRight);다음 코드 한 줄을 사용해도 동일한 결과를 얻을 수 있습니다:
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 로 지정된 두 개의 앵커를 생성하며, 이 중 하나는 수평 모서리용이고 다른 하나는 수직 모서리용입니다.
이는 모서리에 앵커를 설정하는 작업을 두 변에 앵커를 설정하는 것으로 표현할 수 있으므로 편의를 위한 함수입니다. 예를 들어:
layout->addAnchor(a, Qt::AnchorTop, layout, Qt::AnchorTop);
layout->addAnchor(a, Qt::AnchorLeft, layout, Qt::AnchorLeft);다음 한 줄의 코드로도 동일한 결과를 얻을 수 있습니다:
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);해당 모서리 쌍 사이에 이미 앵커가 존재하는 경우, 이 함수가 지정한 앵커로 대체됩니다.
firstItem secondItem 는 레이아웃에 포함되어 있지 않은 경우 레이아웃에 자동으로 추가됩니다. 즉, ` ()`의 값이 최대 2까지 증가할 수 있습니다. count
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 에 있는 레이아웃 항목을 파기하지 않고 제거합니다. 해당 항목의 소유권은 호출자에게 이전됩니다.
항목을 제거하면 해당 항목과 연결된 모든 앵커도 함께 제거됩니다.
[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.