QMdiArea Class

QMdiArea 위젯은 MDI 창이 표시되는 영역을 제공합니다. 더 보기...

헤더: #include <QMdiArea>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속합니다: QAbstractScrollArea

공용 유형

enum AreaOption { DontMaximizeSubWindowOnActivation }
flags AreaOptions
enum ViewMode { SubWindowView, TabbedView }
enum WindowOrder { CreationOrder, StackingOrder, ActivationHistoryOrder }

속성

공용 함수

QMdiArea(QWidget *parent = nullptr)
virtual ~QMdiArea()
QMdiArea::WindowOrder activationOrder() const
QMdiSubWindow *activeSubWindow() const
QMdiSubWindow *addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags())
QBrush background() const
QMdiSubWindow *currentSubWindow() const
bool documentMode() const
void removeSubWindow(QWidget *widget)
void setActivationOrder(QMdiArea::WindowOrder order)
void setBackground(const QBrush &background)
void setDocumentMode(bool enabled)
void setOption(QMdiArea::AreaOption option, bool on = true)
void setTabPosition(QTabWidget::TabPosition position)
void setTabShape(QTabWidget::TabShape shape)
void setTabsClosable(bool closable)
void setTabsMovable(bool movable)
void setViewMode(QMdiArea::ViewMode mode)
QList<QMdiSubWindow *> subWindowList(QMdiArea::WindowOrder order = CreationOrder) const
QTabWidget::TabPosition tabPosition() const
QTabWidget::TabShape tabShape() const
bool tabsClosable() const
bool tabsMovable() const
bool testOption(QMdiArea::AreaOption option) const
QMdiArea::ViewMode viewMode() const

재구현된 공용 함수

virtual QSize minimumSizeHint() const override
virtual QSize sizeHint() const override

공용 슬롯

신호

void subWindowActivated(QMdiSubWindow *window)

재구현된 보호 함수

virtual void childEvent(QChildEvent *childEvent) override
virtual bool event(QEvent *event) override
virtual bool eventFilter(QObject *object, QEvent *event) override
virtual void paintEvent(QPaintEvent *paintEvent) override
virtual void resizeEvent(QResizeEvent *resizeEvent) override
virtual void scrollContentsBy(int dx, int dy) override
virtual void showEvent(QShowEvent *showEvent) override
virtual void timerEvent(QTimerEvent *timerEvent) override
virtual bool viewportEvent(QEvent *event) override

보호된 슬롯

virtual void setupViewport(QWidget *viewport) override

상세 설명

QMdiArea는 기본적으로 MDI 창을 위한 창 관리자처럼 작동합니다. 예를 들어, 관리하는 창을 자체적으로 그려서 계단식 또는 타일 패턴으로 배열합니다. QMdiArea는 일반적으로 QMainWindow 에서 중앙 위젯으로 사용되어 MDI 애플리케이션을 만들지만, 어떤 레이아웃에도 배치할 수 있습니다. 다음 코드는 기본 창에 영역을 추가합니다:

    QMainWindow *mainWindow = new QMainWindow;
    mainWindow->setCentralWidget(mdiArea);

최상위 창에 대한 창 관리자와 달리 모든 창 플래그(Qt::WindowFlags)는 현재 위젯 스타일에서 플래그가 지원되는 한 QMdiArea에서 지원됩니다. 특정 플래그가 스타일에서 지원되지 않는 경우(예: WindowShadeButtonHint)에도 showShaded( )를 사용하여 창을 음영 처리할 수 있습니다.

QMdiArea의 하위 창은 QMdiSubWindow 의 인스턴스입니다. addSubWindow()를 사용하여 MDI 영역에 추가됩니다. 이 함수에 내부 위젯으로 설정된 QWidget 을 전달하는 것이 일반적이지만 QMdiSubWindow 을 직접 전달할 수도 있습니다. 이 클래스는 QWidget 을 상속하며 프로그래밍할 때 일반 최상위 창과 동일한 API를 사용할 수 있습니다. QMdiSubWindow 에는 MDI 창에 특화된 동작도 있습니다. 자세한 내용은 QMdiSubWindow 클래스 설명을 참조하세요.

하위 창은 키보드 포커스를 받거나 setFocus()가 호출될 때 활성화됩니다. 사용자는 일반적인 방법으로 포커스를 이동하여 창을 활성화합니다. 활성 창이 변경되면 MDI 영역은 subWindowActivated() 신호를 방출하고 activeSubWindow() 함수는 활성 하위 창을 반환합니다.

편의 함수 subWindowList()는 모든 하위 창 목록을 반환합니다. 이 정보는 예를 들어 창 목록이 포함된 팝업 메뉴에서 사용할 수 있습니다.

하위 창은 현재 WindowOrder 을 기준으로 정렬됩니다. subWindowList () 및 activateNextSubWindow() 및 activatePreviousSubWindow()에 사용됩니다. 또한 cascadeSubWindows() 및 tileSubWindows()로 창을 계단식으로 배열하거나 타일링할 때도 사용됩니다.

QMdiArea는 하위 창을 위한 두 가지 기본 제공 레이아웃 전략을 제공합니다: cascadeSubWindows() 및 tileSubWindows(). 둘 다 슬롯이며 메뉴 항목에 쉽게 연결할 수 있습니다.

참고: QMdiArea의 기본 스크롤 막대 속성은 Qt::ScrollBarAlwaysOff 입니다.

QMdiSubWindow참조하세요 .

멤버 유형 문서

열거형 QMdiArea::AreaOption
플래그 QMdiArea::AreaOptions

이 열거형은 QMdiArea 의 동작을 사용자 정의하는 옵션을 설명합니다.

Constant설명
QMdiArea::DontMaximizeSubWindowOnActivation0x1활성화된 하위 창이 최대화되면 기본 동작은 활성화된 다음 하위 창을 최대화하는 것입니다. 이 동작을 원하지 않으면 이 옵션을 설정합니다.

영역 옵션 유형은 QFlags<영역 옵션>에 대한 유형 정의입니다. AreaOption 값의 OR 조합을 저장합니다.

enum QMdiArea::ViewMode

이 열거형은 영역의 보기 모드, 즉 하위 창이 표시되는 방식을 설명합니다.

Constant설명
QMdiArea::SubWindowView0창 프레임으로 하위 창을 표시합니다(기본값).
QMdiArea::TabbedView1탭 표시줄에 탭으로 하위 창을 표시합니다.

setViewMode()도 참조하세요 .

enum QMdiArea::WindowOrder

subWindowList()에서 반환하는 하위 창 목록의 순서를 지정하는 데 사용할 기준을 지정합니다. cascadeSubWindows () 및 tileSubWindows() 함수는 창을 정렬할 때 이 순서를 따릅니다.

상수설명
QMdiArea::CreationOrder0창이 생성된 순서대로 반환됩니다.
QMdiArea::StackingOrder1창은 스택된 순서대로 반환되며, 가장 위에 있는 창이 목록의 마지막에 있습니다.
QMdiArea::ActivationHistoryOrder2창은 활성화된 순서대로 반환됩니다.

subWindowList()도 참조하세요 .

속성 문서

activationOrder : WindowOrder

이 속성은 하위 창 목록의 순서 기준을 보유합니다.

이 속성은 subWindowList()에서 반환하는 하위 창 목록의 순서 기준을 지정합니다. 기본값은 창 생성 순서입니다.

액세스 함수:

QMdiArea::WindowOrder activationOrder() const
void setActivationOrder(QMdiArea::WindowOrder order)

subWindowList()도 참조하세요 .

background : QBrush

이 속성은 작업 공간의 배경 브러시를 보유합니다.

이 속성은 작업 공간 영역 자체의 배경 브러시를 설정합니다. 기본적으로 회색이지만 모든 브러시(예: 색상, 그라데이션 또는 픽셀맵)가 될 수 있습니다.

기능에 액세스합니다:

QBrush background() const
void setBackground(const QBrush &background)

documentMode : bool

이 속성은 탭 보기 모드에서 탭 표시줄이 문서 모드로 설정되어 있는지 여부를 나타냅니다.

문서 모드는 기본적으로 비활성화되어 있습니다.

기능에 액세스합니다:

bool documentMode() const
void setDocumentMode(bool enabled)

QTabBar::documentModesetViewMode()도 참조하세요 .

tabPosition : QTabWidget::TabPosition

이 속성은 탭 보기 모드에서 탭의 위치를 유지합니다.

이 속성의 사용 가능한 값은 QTabWidget::TabPosition 열거형에 설명되어 있습니다.

액세스 함수:

QTabWidget::TabPosition tabPosition() const
void setTabPosition(QTabWidget::TabPosition position)

QTabWidget::TabPositionsetViewMode()도 참조하세요 .

tabShape : QTabWidget::TabShape

이 속성은 탭 보기 모드에서 탭의 모양을 유지합니다.

이 속성의 가능한 값은 QTabWidget::Rounded (기본값) 또는 QTabWidget::Triangular 입니다.

액세스 함수:

QTabWidget::TabShape tabShape() const
void setTabShape(QTabWidget::TabShape shape)

QTabWidget::TabShapesetViewMode()도 참조하세요 .

tabsClosable : bool

이 속성은 탭 보기 모드에서 탭 막대에 각 탭에 닫기 버튼을 배치할지 여부를 지정합니다.

탭은 기본적으로 닫을 수 없습니다.

액세스 기능:

bool tabsClosable() const
void setTabsClosable(bool closable)

QTabBar::tabsClosablesetViewMode()도 참조하세요 .

tabsMovable : bool

이 속성은 사용자가 탭 보기 모드에서 탭 표시줄 영역 내에서 탭을 이동할 수 있는지 여부를 나타냅니다.

탭은 기본적으로 이동할 수 없습니다.

액세스 기능:

bool tabsMovable() const
void setTabsMovable(bool movable)

QTabBar::movablesetViewMode()도 참조하세요 .

viewMode : ViewMode

이 속성은 QMdiArea 에 하위 창이 표시되는 방식을 유지합니다.

기본적으로 SubWindowView 은 하위 창을 표시하는 데 사용됩니다.

액세스 함수:

QMdiArea::ViewMode viewMode() const
void setViewMode(QMdiArea::ViewMode mode)

ViewMode, setTabShape() 및 setTabPosition()도 참조하세요 .

멤버 함수 문서

QMdiArea::QMdiArea(QWidget *parent = nullptr)

빈 mdi 영역을 생성합니다. parentQWidget 의 생성자에게 전달됩니다.

[virtual noexcept] QMdiArea::~QMdiArea()

MDI 영역을 파괴합니다.

[slot] void QMdiArea::activateNextSubWindow()

하위 창 목록의 다른 창에 키보드 포커스를 지정합니다. 활성화되는 창은 현재 activation order 에 의해 결정되는 다음 창이 됩니다.

activatePreviousSubWindow() 및 QMdiArea::WindowOrder도 참조하세요 .

[slot] void QMdiArea::activatePreviousSubWindow()

키보드 포커스를 하위 창 목록의 다른 창으로 이동합니다. 활성화되는 창은 현재 activation order 에 의해 결정된 이전 창이 됩니다.

activateNextSubWindow() 및 QMdiArea::WindowOrder도 참조하세요 .

QMdiSubWindow *QMdiArea::activeSubWindow() const

현재 활성화된 하위 창에 대한 포인터를 반환합니다. 현재 활성화된 창이 없으면 nullptr 이 반환됩니다.

하위 창은 창 상태와 관련하여 최상위 창으로 취급됩니다. 즉, MDI 영역 외부의 위젯이 활성 창인 경우 하위 창은 활성화되지 않습니다. MDI 영역이 있는 창에 있는 위젯이 포커스를 받으면 해당 창이 활성화됩니다.

setActiveSubWindow() 및 Qt::WindowState참조하세요 .

QMdiSubWindow *QMdiArea::addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags())

widget 을 MDI 영역에 새 하위 창으로 추가합니다. windowFlags 이 0이 아닌 경우 위젯에 설정된 플래그를 재정의합니다.

widgetQMdiSubWindow 또는 다른 QWidget 일 수 있습니다(이 경우 MDI 영역에서 하위 창을 만들고 widget 을 내부 위젯으로 설정합니다).

참고: 하위 창이 추가되면 해당 하위 창의 부모는 QMdiArea뷰포트 위젯이 됩니다.

    QMdiArea mdiArea;
    QMdiSubWindow *subWindow1 = new QMdiSubWindow;
    subWindow1->setWidget(internalWidget1);
    subWindow1->setAttribute(Qt::WA_DeleteOnClose);
    mdiArea.addSubWindow(subWindow1);

    QMdiSubWindow *subWindow2 =
        mdiArea.addSubWindow(internalWidget2);

자체 하위 창을 만들 때 MDI 영역에서 창이 닫힐 때 삭제되도록 하려면 Qt::WA_DeleteOnClose 위젯 속성을 설정해야 합니다. 그렇지 않으면 창이 숨겨지고 MDI 영역에서 다음 하위 창이 활성화되지 않습니다.

MDI 영역에 추가된 QMdiSubWindow 을 반환합니다.

removeSubWindow()도 참조하세요 .

[slot] void QMdiArea::cascadeSubWindows()

모든 자식 창을 계단식 패턴으로 정렬합니다.

tileSubWindows()도 참조하세요 .

[override virtual protected] void QMdiArea::childEvent(QChildEvent *childEvent)

다시 구현합니다: QObject::childEvent(QChildEvent * 이벤트).

[slot] void QMdiArea::closeActiveSubWindow()

활성 하위 창을 닫습니다.

closeAllSubWindows()도 참조하세요 .

[slot] void QMdiArea::closeAllSubWindows()

각 창에 QCloseEvent 을 전송하여 모든 하위 창을 닫습니다. 하위 창이 닫히기 전에 하위 창에서 subWindowActivated() 신호를 받을 수 있습니다(다른 창이 닫힐 때 MDI 영역이 하위 창을 활성화하는 경우).

닫기 이벤트를 무시하는 하위 창은 열린 상태로 유지됩니다.

closeActiveSubWindow()도 참조하세요 .

QMdiSubWindow *QMdiArea::currentSubWindow() const

현재 하위 창에 대한 포인터를 반환하거나 현재 하위 창이 없는 경우 nullptr 을 반환합니다.

QMdiArea 을 포함하는 QApplication 이 활성화된 경우 이 함수는 activeSubWindow()와 동일하게 반환합니다.

activeSubWindow() 및 QApplication::activeWindow()도 참조하세요 .

[override virtual protected] bool QMdiArea::event(QEvent *event)

다시 구현합니다: QAbstractScrollArea::event(QEvent * 이벤트).

[override virtual protected] bool QMdiArea::eventFilter(QObject *object, QEvent *event)

다시 구현합니다: QObject::eventFilter(QObject *watched, QEvent *event).

[override virtual] QSize QMdiArea::minimumSizeHint() const

재구현합니다: QAbstractScrollArea::minimumSizeHint() const.

[override virtual protected] void QMdiArea::paintEvent(QPaintEvent *paintEvent)

다시 구현합니다: QAbstractScrollArea::paintEvent(QPaintEvent * 이벤트).

void QMdiArea::removeSubWindow(QWidget *widget)

MDI 영역에서 widget 을 제거합니다. widgetQMdiSubWindow 또는 하위 창의 내부 위젯인 위젯이어야 합니다. 참고 widgetQMdiArea 에 의해 실제로 삭제되지 않습니다. QMdiSubWindow 을 전달하면 부모가 nullptr 으로 설정되어 제거되지만, 내부 위젯을 전달하면 자식 위젯이 nullptr 으로 설정되고 QMdiSubWindow제거되지 않습니다.

addSubWindow()도 참조하세요 .

[override virtual protected] void QMdiArea::resizeEvent(QResizeEvent *resizeEvent)

다시 구현합니다: QAbstractScrollArea::resizeEvent(QResizeEvent * 이벤트).

[override virtual protected] void QMdiArea::scrollContentsBy(int dx, int dy)

재구현합니다: QAbstractScrollArea::scrollContentsBy(int dx, int dy).

[slot] void QMdiArea::setActiveSubWindow(QMdiSubWindow *window)

하위 창을 활성화합니다 window. windownullptr 인 경우 현재 활성화된 모든 창이 비활성화됩니다.

activeSubWindow()도 참조하세요 .

void QMdiArea::setOption(QMdiArea::AreaOption option, bool on = true)

on 이 참이면 MDI 영역에서 option 이 활성화되고, 그렇지 않으면 비활성화됩니다. 각 옵션의 효과는 AreaOption 을 참조하세요.

AreaOptiontestOption()도 참조하세요 .

[override virtual protected slot] void QMdiArea::setupViewport(QWidget *viewport)

다시 구현합니다: QAbstractScrollArea::setupViewport(QWidget *뷰포트).

이 슬롯은 setViewport()이 호출된 후 QAbstractScrollArea 에 의해 호출됩니다. 이 함수를 QMdiArea 의 서브클래스에서 다시 구현하여 새로운 viewport 을 사용하기 전에 초기화하세요.

setViewport()도 참조하세요 .

[override virtual protected] void QMdiArea::showEvent(QShowEvent *showEvent)

다시 구현합니다: QWidget::showEvent(QShowEvent * 이벤트).

[override virtual] QSize QMdiArea::sizeHint() const

재구현합니다: QAbstractScrollArea::sizeHint() const.

[signal] void QMdiArea::subWindowActivated(QMdiSubWindow *window)

QMdiAreawindow 이 활성화된 후에 이 신호를 보냅니다. windownullptr 인 경우 QMdiArea 는 마지막 활성 창이 방금 비활성화되었고 작업 영역에 활성 창이 없습니다.

QMdiArea::activeSubWindow()도 참조하세요 .

QList<QMdiSubWindow *> QMdiArea::subWindowList(QMdiArea::WindowOrder order = CreationOrder) const

MDI 영역에 있는 모든 하위 창 목록을 반환합니다. orderCreationOrder (기본값)인 경우 창은 작업 영역에 삽입된 순서대로 정렬됩니다. orderStackingOrder 인 경우 창이 스택 순서대로 나열되며 맨 위에 있는 창이 목록의 마지막 항목으로 표시됩니다. orderActivationHistoryOrder 인 경우 창은 최근 활성화 기록에 따라 나열됩니다.

WindowOrder도 참조하세요 .

bool QMdiArea::testOption(QMdiArea::AreaOption option) const

option 이 활성화된 경우 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

AreaOptionsetOption()도 참조하세요 .

[slot] void QMdiArea::tileSubWindows()

모든 자식 창을 타일 패턴으로 정렬합니다.

cascadeSubWindows()도 참조하세요 .

[override virtual protected] void QMdiArea::timerEvent(QTimerEvent *timerEvent)

다시 구현합니다: QObject::timerEvent(Q타이머이벤트 *이벤트).

[override virtual protected] bool QMdiArea::viewportEvent(QEvent *event)

다시 구현합니다: QAbstractScrollArea::viewportEvent(QEvent * 이벤트).

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