QGraphicsLayout Class

QGraphicsLayout 클래스는 그래픽 보기의 모든 레이아웃에 대한 기본 클래스를 제공합니다. 더 보기...

Header: #include <QGraphicsLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속합니다: QGraphicsLayoutItem
상속받습니다:

QGraphicsAnchorLayout, QGraphicsGridLayout, 그리고 QGraphicsLinearLayout

공용 함수

QGraphicsLayout(QGraphicsLayoutItem *parent = nullptr)
virtual ~QGraphicsLayout()
void activate()
virtual int count() const = 0
virtual void invalidate()
bool isActivated() const
virtual QGraphicsLayoutItem *itemAt(int i) const = 0
virtual void removeAt(int index) = 0
void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom)
virtual void widgetEvent(QEvent *e)

재구현된 공용 함수

virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const override
virtual void updateGeometry() override

보호된 함수

void addChildLayoutItem(QGraphicsLayoutItem *layoutItem)

상세 설명

QGraphicsLayout은 QGraphicsWidget 에 대해 QGraphicsWidget 자식 및 기타 QGraphicsLayoutItem 객체를 정렬하는 가상 API를 정의하는 추상 클래스입니다. QGraphicsWidgetQGraphicsWidget::setLayout()를 통해 QGraphicsLayout에 책임을 할당합니다. 위젯의 크기가 조정되면 레이아웃이 위젯의 자식들을 자동으로 정렬합니다. QGraphicsLayout은 QGraphicsLayoutItem 을 상속하므로 자체 서브클래스를 포함한 모든 레이아웃에서 관리할 수 있습니다.

사용자 정의 레이아웃 작성하기

QGraphicsLayout을 기본으로 사용하여 사용자 정의 레이아웃(예: 흐름 레이아웃)을 작성할 수 있지만 대신 그 하위 클래스 중 하나( QGraphicsLinearLayout 또는 QGraphicsGridLayout)를 사용하는 것이 더 일반적입니다. 사용자 정의 레이아웃을 만들 때 다음 함수는 최소한으로 다시 구현해야 합니다:

함수설명
QGraphicsLayoutItem::setGeometry()레이아웃의 지오메트리가 설정되면 알려줍니다. 이 함수를 재구현하여 자체 레이아웃 클래스에 지오메트리를 저장할 수 있습니다.
QGraphicsLayoutItem::sizeHint()레이아웃의 크기 힌트를 반환합니다.
QGraphicsLayout::count()레이아웃의 항목 수를 반환합니다.
QGraphicsLayout::itemAt()레이아웃의 항목에 대한 포인터를 반환합니다.
QGraphicsLayout::removeAt()레이아웃에서 항목을 파괴하지 않고 제거합니다.

각 함수를 구현하는 방법에 대한 자세한 내용은 개별 함수 설명서를 참조하세요.

각 레이아웃은 위젯과 레이아웃 항목을 정렬하기 위한 자체 API를 정의합니다. 예를 들어 그리드 레이아웃의 경우 행과 열 인덱스가 필요하며 행과 열 범위, 정렬, 간격 등을 선택적으로 지정할 수 있습니다. 그러나 선형 레이아웃에서는 항목의 위치를 지정하기 위해 단일 행 또는 열 인덱스가 필요합니다. 그리드 레이아웃의 경우 삽입 순서는 레이아웃에 어떤 영향도 미치지 않지만 선형 레이아웃의 경우 순서는 필수입니다. 레이아웃 서브클래스를 직접 작성할 때는 레이아웃에 가장 적합한 API를 자유롭게 선택할 수 있습니다.

QGraphicsLayout은 사용자 정의 레이아웃에 레이아웃 항목을 추가하는 addChildLayoutItem() 편의 기능을 제공합니다. 이 함수는 필요한 경우 그래픽 항목의 부모를 자동으로 다시 지정합니다.

레이아웃 활성화하기

레이아웃의 지오메트리가 변경되면 각 항목에서 setGeometry()를 호출하여 관리되는 모든 항목을 즉시 재정렬합니다. 이 재배열을 레이아웃 활성화라고 합니다.

QGraphicsLayout은 관리 중인 QGraphicsLayoutItemcontentsRect()와 일치하도록 자체 지오메트리를 업데이트합니다. 따라서 위젯의 크기가 조정되면 모든 항목이 자동으로 재배열됩니다. QGraphicsLayout은 관리되는 모든 항목의 크기를 캐시하여 setGeometry()를 너무 자주 호출하지 않도록 합니다.

참고: QGraphicsLayout은 할당된 위젯(레이아웃이 아닌)의 contentsRect()와 동일한 지오메트리를 갖습니다.

레이아웃 암시적으로 활성화하기

activate() 또는 invalidate()를 호출하여 두 가지 방법 중 하나를 사용하여 레이아웃을 암시적으로 활성화할 수 있습니다. activate ()를 호출하면 레이아웃이 즉시 활성화됩니다. 반대로 invalidate()를 호출하면 관리되는 위젯에 LayoutRequest 이벤트가 게시되므로 지연됩니다. 이벤트 압축으로 인해 activate()는 제어가 이벤트 루프로 돌아온 후에 한 번만 호출됩니다. 이를 레이아웃 무효화라고 합니다. 레이아웃을 무효화하면 캐시된 정보도 무효화됩니다. 또한 invalidate() 함수는 가상 함수입니다. 따라서 이 함수를 다시 구현하여 QGraphicsLayout의 서브 클래스에서 자체 캐시를 무효화할 수 있습니다.

이벤트 처리

QGraphicsLayout은 가상 widgetEvent() 이벤트 핸들러를 통해 관리하는 위젯에 대한 이벤트를 수신합니다. 레이아웃이 위젯에 할당되면 위젯으로 전달되는 모든 이벤트는 widgetEvent()에서 먼저 처리됩니다. 이를 통해 레이아웃은 가시성 변경 또는 레이아웃 방향 변경과 같은 위젯의 관련 상태 변경을 인식할 수 있습니다.

여백 처리

setContentsMargins() 및 getContentsMargins()을 다시 구현하여 QGraphicsLayout의 여백을 수정할 수 있습니다.

멤버 함수 문서

QGraphicsLayout::QGraphicsLayout(QGraphicsLayoutItem *parent = nullptr)

QGraphicsLayout 객체를 생성합니다.

parentQGraphicsLayoutItem 의 생성자에 전달되고 QGraphicsLayoutItem 의 isLayout 인수는 true로 설정됩니다.

parentQGraphicsWidget 인 경우 해당 위젯에 레이아웃이 설치됩니다. (레이아웃을 설치하면 설치된 이전 레이아웃이 삭제됩니다.) 참고하세요.

[virtual noexcept] QGraphicsLayout::~QGraphicsLayout()

QGraphicsLayout 객체를 삭제합니다.

void QGraphicsLayout::activate()

레이아웃을 활성화하여 레이아웃의 모든 항목이 즉시 재정렬되도록 합니다. 이 함수는 count() 및 itemAt()을 호출한 다음 모든 항목에서 순차적으로 setGeometry()을 호출하는 것을 기반으로 합니다. 활성화되면 레이아웃이 상위의 contentsRect()에 맞게 지오메트리를 조정합니다. 그러면 부모는 자체 레이아웃을 무효화합니다.

크기가 조정되는 것에 대한 응답으로 정렬된 항목 중 하나에 의해 순차적으로 또는 재귀적으로 호출되는 경우 이 함수는 아무 작업도 수행하지 않습니다.

레이아웃은 이 프로세스를 최적화하기 위해 지오메트리 캐싱을 자유롭게 사용할 수 있습니다. 이러한 캐시를 강제로 무효화하려면 activate()를 호출하기 전에 invalidate()를 호출하면 됩니다.

invalidate()도 참조하세요 .

[protected] void QGraphicsLayout::addChildLayoutItem(QGraphicsLayoutItem *layoutItem)

이 기능은 사용자 정의 레이아웃을 위해 제공되는 편의 기능으로, 레이아웃의 모든 항목을 살펴보고 레이아웃의 가장 가까운 QGraphicsWidget 조상으로 그래픽 항목을 다시 부모로 지정합니다.

layoutItem 이 이미 다른 레이아웃에 있는 경우 해당 레이아웃에서 제거됩니다.

사용자 정의 레이아웃에서 특별한 동작을 원하는 경우 이 함수를 무시하고 자체 동작을 구현할 수 있습니다.

graphicsItem()도 참조하세요 .

[pure virtual] int QGraphicsLayout::count() const

이 순수 가상 함수는 레이아웃의 항목 수를 반환하려면 QGraphicsLayout 의 하위 클래스에서 다시 구현해야 합니다.

서브클래스는 항목을 저장하는 방법을 자유롭게 결정할 수 있습니다.

itemAt() 및 removeAt()도 참조하세요 .

[override virtual] void QGraphicsLayout::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const

재구현합니다: QGraphicsLayoutItem::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const.

[virtual] void QGraphicsLayout::invalidate()

레이아웃에서 캐시된 지오메트리 및 크기 힌트 정보를 모두 지우고 관리되는 부모 QGraphicsLayoutItemLayoutRequest 이벤트를 게시합니다.

activate() 및 setGeometry()도 참조하세요 .

bool QGraphicsLayout::isActivated() const

레이아웃이 현재 활성화 중이면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다. 레이아웃이 활성화 중이면 현재 항목을 재정렬하는 중임을 의미합니다(즉, activate() 함수가 호출되었지만 아직 반환되지 않았음).

activate() 및 invalidate()도 참조하세요 .

[pure virtual] QGraphicsLayoutItem *QGraphicsLayout::itemAt(int i) const

이 순수 가상 함수는 QGraphicsLayout 의 서브클래스에서 다시 구현해야 인덱스 i 에 있는 항목에 대한 포인터를 반환할 수 있습니다. 재구현은 i 가 유효하다고 가정할 수 있습니다(즉, count() 값을 존중합니다). count ()와 함께 레이아웃의 모든 항목을 반복하는 수단으로 제공됩니다.

서브클래스는 항목을 저장하는 방법을 자유롭게 결정할 수 있으며, 시각적 배열은 이 함수를 통해 반영할 필요가 없습니다.

count() 및 removeAt()도 참조하세요 .

[pure virtual] void QGraphicsLayout::removeAt(int index)

이 순수 가상 함수는 index 에서 항목을 제거하려면 QGraphicsLayout 의 서브클래스에서 다시 구현해야 합니다. 재구현은 index 가 유효하다고 가정할 수 있습니다(즉, count() 값을 존중합니다).

제거된 항목은 레이아웃 계층 구조에서 제거된 것으로 간주되므로 구현에서는 제거된 항목의 parentLayoutItem()가 이 레이아웃을 가리키지 않도록 해야 합니다.

레이아웃을 애플리케이션 간에 재사용하려는 경우 레이아웃에서 항목을 삭제하는 것이 좋지만 그래픽 보기 프레임워크는 이에 의존하지 않습니다.

서브클래스는 항목을 저장하는 방법을 자유롭게 결정할 수 있습니다.

itemAt() 및 count()도 참조하세요 .

void QGraphicsLayout::setContentsMargins(qreal left, qreal top, qreal right, qreal bottom)

콘텐츠 여백을 left, top, right, bottom 으로 설정합니다. 최상위 레이아웃의 기본 콘텐츠 여백은 스타일에 따라 달라집니다( QStyle::PM_LayoutLeftMargin, QStyle::PM_LayoutTopMargin, QStyle::PM_LayoutRightMarginQStyle::PM_LayoutBottomMargin 에 대해 pixelMetric을 쿼리하여).

서브 레이아웃의 경우 기본 여백은 0입니다.

콘텐츠 여백을 변경하면 레이아웃이 자동으로 무효화됩니다.

invalidate()도 참조하세요 .

[override virtual] void QGraphicsLayout::updateGeometry()

다시 구현합니다: QGraphicsLayoutItem::updateGeometry().

[virtual] void QGraphicsLayout::widgetEvent(QEvent *e)

QGraphicsLayout 는 이 이벤트 핸들러를 사용하여 지오메트리 변경, 레이아웃 변경 또는 레이아웃 방향 변경과 같은 레이아웃 관련 이벤트를 수신합니다.

e 는 이벤트에 대한 포인터입니다.

이 이벤트 핸들러를 다시 구현하여 사용자 정의 레이아웃에 대한 유사한 이벤트를 추적할 수 있습니다.

QGraphicsWidget::event() 및 QGraphicsItem::sceneEvent()도 참조하세요 .

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