QGraphicsAnchorLayout Class

QGraphicsAnchorLayout 클래스는 그래픽 보기에서 위젯을 함께 앵커링할 수 있는 레이아웃을 제공합니다. 더 보기...

Header: #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)

QGraphicsLayout 의 생성자에 parent 을 전달합니다.

[virtual noexcept] QGraphicsAnchorLayout::~QGraphicsAnchorLayout()

QGraphicsAnchorLayout 객체를 삭제합니다.

QGraphicsAnchor *QGraphicsAnchorLayout::addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)

항목 firstItem 의 가장자리 firstEdge 와 항목 secondItem 의 가장자리 secondEdge 사이에 앵커를 생성합니다. 앵커의 간격은 스타일에서 가져옵니다. 레이아웃 가장자리와 항목 가장자리 사이의 앵커는 크기가 0입니다. 가장자리 사이에 이미 앵커가 있는 경우 새 앵커가 이전 앵커를 대체합니다.

firstItemsecondItem 는 레이아웃의 일부가 아닌 경우 레이아웃에 자동으로 추가됩니다. 즉, 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 의 해당 가장자리에 고정하여 firstItemorientations 에 지정된 치수의 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)

모서리로 지정된 firstItemsecondItem 사이에 두 개의 앵커( firstCornersecondCorner, 하나는 가로 가장자리용이고 다른 하나는 세로 가장자리용)를 생성합니다.

모서리 앵커링은 두 모서리를 앵커링하는 것으로 표현할 수 있으므로 편리한 기능입니다. 예를 들어

layout->addAnchor(a, Qt::AnchorTop, layout, Qt::AnchorTop);
layout->addAnchor(a, Qt::AnchorLeft, layout, Qt::AnchorLeft);

다음 코드 줄을 사용하여 이 기능을 구현할 수도 있습니다:

layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);

가장자리 쌍 사이에 이미 앵커가 있는 경우 이 함수가 지정한 앵커로 대체됩니다.

firstItemsecondItem 가 레이아웃의 일부가 아닌 경우 레이아웃에 자동으로 추가됩니다. 즉, count()는 최대 2까지 늘어날 수 있습니다.

addAnchor() 및 addAnchors()도 참조하세요 .

QGraphicsAnchor *QGraphicsAnchorLayout::anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)

firstItemfirstEdgesecondItemsecondEdge 에 정의된 앵커 포인트 사이의 앵커를 반환합니다. 이러한 앵커가 없으면 함수는 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 어느, const QSizeF &constraint) const.

qreal QGraphicsAnchorLayout::verticalSpacing() const

앵커 레이아웃의 기본 세로 간격을 반환합니다.

horizontalSpacing() 및 setVerticalSpacing()도 참조하세요 .

© 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.