QLayout Class

QLayout 클래스는 지오메트리 관리자의 기본 클래스입니다. 더 보기...

Header: #include <QLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속합니다: QObjectQLayoutItem
상속받는 사람

QBoxLayout, QFormLayout, QGridLayout, 그리고 QStackedLayout

공개 유형

enum SizeConstraint { SetDefaultConstraint, SetFixedSize, SetMinimumSize, SetMaximumSize, SetMinAndMaxSize, SetNoConstraint }

속성

공용 함수

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()를 구현하여 공간이 너무 적은 경우 레이아웃 크기가 0으로 조정되지 않도록 해야 합니다. 너비에 따라 높이가 달라지는 어린이를 지원하려면 hasHeightForWidth() 및 heightForWidth()를 구현하세요. 사용자 정의 레이아웃 관리자 구현에 대한 자세한 내용은 플로우 레이아웃 예시를 참조하세요.

레이아웃 관리자를 삭제하면 지오메트리 관리가 중지됩니다.

QLayoutItem, 레이아웃 관리, 기본 레이아웃 예제흐름 레이아웃 예제를참조하세요 .

멤버 유형 문서

enum QLayout::SizeConstraint

가능한 값은 다음과 같습니다:

상수설명
QLayout::SetDefaultConstraint0위젯에 이미 최소 크기가 설정되어 있지 않은 경우 기본 위젯의 최소 크기는 minimumSize()로 설정됩니다.
QLayout::SetFixedSize3기본 위젯의 크기가 sizeHint()로 설정되며 크기를 전혀 조정할 수 없습니다.
QLayout::SetMinimumSize2기본 위젯의 최소 크기가 minimumSize()로 설정되어 있으며 이보다 작을 수 없습니다.
QLayout::SetMaximumSize4기본 위젯의 최대 크기가 maximumSize()로 설정되어 더 커질 수 없습니다.
QLayout::SetMinAndMaxSize5기본 위젯의 최소 크기는 minimumSize()로 설정되고 최대 크기는 maximumSize()로 설정됩니다.
QLayout::SetNoConstraint1위젯은 제한되지 않습니다.

setSizeConstraint()도 참조하세요 .

속성 문서

sizeConstraint : SizeConstraint

이 속성은 레이아웃의 크기 조정 모드를 유지합니다.

기본 모드는 SetDefaultConstraint 입니다.

액세스 함수:

QLayout::SizeConstraint sizeConstraint() const
void setSizeConstraint(QLayout::SizeConstraint)

spacing : int

이 속성은 레이아웃 내부의 위젯 간 간격을 유지합니다.

값을 명시적으로 설정하지 않으면 레이아웃의 간격은 상위 레이아웃 또는 상위 위젯의 스타일 설정에서 상속됩니다.

QGridLayoutQFormLayout 의 경우 setHorizontalSpacing() 및 setVerticalSpacing()를 사용하여 가로 및 세로 간격을 다르게 설정할 수 있습니다. 이 경우 spacing()은 -1을 반환합니다.

함수에 액세스합니다:

virtual int spacing() const
virtual void setSpacing(int)

contentsRect(), getContentsMargins(), QStyle::layoutSpacing() 및 QStyle::pixelMetric()도 참조하세요 .

멤버 함수 문서

[explicit] QLayout::QLayout(QWidget *parent = nullptr)

부모가 parent 인 새 최상위 QLayout을 구성합니다.

이 레이아웃은 parent 에 대한 최상위 레이아웃으로 직접 설정됩니다. 위젯에 대한 최상위 레이아웃은 하나만 있을 수 있습니다. QWidget::layout ()에 의해 반환됩니다.

parentnullptr 인 경우 이 레이아웃을 다른 레이아웃에 삽입하거나 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)

이 함수는 하위 클래스의 addWidget() 함수에서 호출되어 w 을 레이아웃의 관리 위젯으로 추가합니다.

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 * 이벤트).

[static] QSize QLayout::closestAcceptableSize(const QWidget *widget, const QSize &size)

heightForWidth()을 포함하여 widget 의 모든 크기 제약 조건을 만족하고 size 에 최대한 근접한 크기를 반환합니다.

QMargins QLayout::contentsMargins() const

레이아웃 주위에 사용된 여백을 반환합니다.

기본적으로 QLayout 은 스타일에서 제공한 값을 사용합니다. 대부분의 플랫폼에서 여백은 모든 방향에서 11픽셀입니다.

참고: contentMargins 속성에 대한 게터 함수.

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 값은 한 차원만 늘리려는 것을 의미하고 Qt::Vertical | Qt::Horizontal 값은 두 차원 모두 늘리려는 것을 의미합니다.

기본 구현은 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

nullptr 이 아닌 left, top, rightbottom 각각에 대해 포인터가 가리키는 위치에 지정된 여백의 크기를 저장합니다.

기본적으로 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()에 필요한 공간이 포함되지 않습니다.

기본 구현에서는 크기를 무제한으로 조정할 수 있습니다.

이 레이아웃에 설정된 메뉴 모음을 반환하거나 메뉴 모음이 설정되어 있지 않으면 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 을 레이아웃에서 제거합니다. 항목을 삭제하는 것은 호출자의 책임입니다.

item 는 레이아웃이 될 수 있습니다( QLayoutQLayoutItem 을 상속하므로).

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 가 반환됩니다. optionsQt::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 이 참이면 이 레이아웃을 활성화하고, 그렇지 않으면 비활성화합니다.

활성화된 레이아웃은 변경 사항에 따라 동적으로 조정되며, 비활성화된 레이아웃은 없는 것처럼 작동합니다.

기본적으로 모든 레이아웃이 활성화됩니다.

isEnabled()도 참조하세요 .

[override virtual] void QLayout::setGeometry(const QRect &r)

재구현합니다: QLayoutItem::setGeometry(const QRect &r).

geometry()도 참조하세요 .

void QLayout::setMenuBar(QWidget *widget)

지오메트리 관리자에게 메뉴 모음 widgetparentWidget()의 상단, 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
}

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

[since 6.1] void QLayout::unsetContentsMargins()

레이아웃 주위의 사용자 정의 여백을 설정 해제합니다. 레이아웃은 스타일에서 제공하는 기본값을 사용합니다.

참고: 속성 재설정 함수 contentsMargins.

이 함수는 Qt 6.1에 도입되었습니다.

setContentsMargins()도 참조하세요 .

void QLayout::update()

parentWidget()의 레이아웃을 업데이트합니다.

이 함수는 가장 적절한 시간에 자동으로 호출되므로 일반적으로 호출할 필요가 없습니다.

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

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