이 페이지에서

QMainWindow Class

QMainWindow 클래스는 애플리케이션의 메인 창을 제공합니다. 더 보기...

헤더: #include <QMainWindow>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속: QWidget

공개 유형

enum DockOption { AnimatedDocks, AllowNestedDocks, AllowTabbedDocks, ForceTabbedDocks, VerticalTabs, GroupedDragging }
flags DockOptions

속성

공개 함수

QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
virtual ~QMainWindow()
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)
void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)
void addToolBar(QToolBar *toolbar)
QToolBar *addToolBar(const QString &title)
void addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea)
QWidget *centralWidget() const
Qt::DockWidgetArea corner(Qt::Corner corner) const
virtual QMenu *createPopupMenu()
QMainWindow::DockOptions dockOptions() const
Qt::DockWidgetArea dockWidgetArea(QDockWidget *dockwidget) const
bool documentMode() const
QSize iconSize() const
void insertToolBar(QToolBar *before, QToolBar *toolbar)
void insertToolBarBreak(QToolBar *before)
bool isAnimated() const
bool isDockNestingEnabled() const
QMenuBar *menuBar() const
QWidget *menuWidget() const
void removeDockWidget(QDockWidget *dockwidget)
void removeToolBar(QToolBar *toolbar)
void removeToolBarBreak(QToolBar *before)
void resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)
bool restoreDockWidget(QDockWidget *dockwidget)
bool restoreState(const QByteArray &state, int version = 0)
QByteArray saveState(int version = 0) const
void setCentralWidget(QWidget *widget)
void setCorner(Qt::Corner corner, Qt::DockWidgetArea area)
void setDockOptions(QMainWindow::DockOptions options)
void setDocumentMode(bool enabled)
void setIconSize(const QSize &iconSize)
void setMenuBar(QMenuBar *menuBar)
void setMenuWidget(QWidget *menuBar)
void setStatusBar(QStatusBar *statusbar)
void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition)
void setTabShape(QTabWidget::TabShape tabShape)
void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
void splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)
QStatusBar *statusBar() const
QTabWidget::TabPosition tabPosition(Qt::DockWidgetArea area) const
QTabWidget::TabShape tabShape() const
QList<QDockWidget *> tabifiedDockWidgets(QDockWidget *dockwidget) const
void tabifyDockWidget(QDockWidget *first, QDockWidget *second)
QWidget *takeCentralWidget()
Qt::ToolBarArea toolBarArea(const QToolBar *toolbar) const
bool toolBarBreak(QToolBar *toolbar) const
Qt::ToolButtonStyle toolButtonStyle() const
bool unifiedTitleAndToolBarOnMac() const

공개 슬롯

void setAnimated(bool enabled)
void setDockNestingEnabled(bool enabled)
void setUnifiedTitleAndToolBarOnMac(bool set)

신호

void iconSizeChanged(const QSize &iconSize)
void tabifiedDockWidgetActivated(QDockWidget *dockWidget)
void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle)

재구현된 보호 함수

virtual void contextMenuEvent(QContextMenuEvent *event) override
virtual bool event(QEvent *event) override

상세 설명

Qt 메인 윈도우 프레임워크

메인 윈도우는 애플리케이션의 사용자 인터페이스를 구축하기 위한 프레임워크를 제공합니다. Qt에는 메인 윈도우 관리를 위한 QMainWindow 및 관련 클래스가 있습니다. QMainWindow에는 자체 레이아웃이 있으며, 여기에 QToolBar, QDockWidget, QMenuBar 및 QStatusBar 를 추가할 수 있습니다. 레이아웃에는 모든 종류의 위젯을 배치할 수 있는 중앙 영역이 있습니다. 아래에서 레이아웃 이미지를 확인할 수 있습니다.

메인 창 및 구성 요소의 배치도

메인 윈도우 컴포넌트 생성

중앙 위젯은 일반적으로 QTextEdit 이나 QGraphicsView 과 같은 표준 Qt 위젯입니다. 고급 애플리케이션의 경우 사용자 정의 위젯을 사용할 수도 있습니다. 중앙 위젯은 setCentralWidget() 을 사용하여 설정합니다.

메인 윈도우는 단일 문서 인터페이스(SDI) 또는 다중 문서 인터페이스(MDI) 중 하나를 갖습니다. Qt에서 MDI 애플리케이션을 만들려면 QMdiArea 를 중앙 위젯으로 사용합니다.

이제 메인 윈도우에 추가할 수 있는 다른 위젯들을 하나씩 살펴보겠습니다. 각 위젯을 생성하고 추가하는 방법에 대한 예제를 제시합니다.

메뉴 생성

Qt는 QMenu 에서 메뉴를 구현하며, QMainWindow는 이를 QMenuBar 에 저장합니다. QAction는 메뉴에 추가되며, 메뉴는 이를 메뉴 항목으로 표시합니다.

menuBar() 를 호출하여 메인 창의 메뉴 바에 새 메뉴를 추가할 수 있습니다. 이 함수는 창의 QMenuBar 를 반환하며, 이후 QMenuBar::addMenu()를 사용하여 메뉴를 추가할 수 있습니다.

QMainWindow에는 기본 메뉴 바가 포함되어 있지만, setMenuBar() 를 사용하여 직접 설정할 수도 있습니다. 사용자 정의 메뉴 바(즉, QMenuBar 위젯을 사용하지 않는)를 구현하려면 setMenuWidget() 를 사용하여 설정할 수 있습니다.

메뉴를 생성하는 방법은 다음과 같습니다:

    void MainWindow::createMenus()
    {
        fileMenu = menuBar()->addMenu(tr("&File"));
        fileMenu->addAction(newAct);
        fileMenu->addAction(openAct);
        fileMenu->addAction(saveAct);

createPopupMenu() 함수는 메인 창이 컨텍스트 메뉴 이벤트를 수신할 때 팝업 메뉴를 생성합니다. 기본 구현은 도크 위젯과 툴바에서 선택 가능한 항목을 포함한 메뉴를 생성합니다. 사용자 정의 메뉴를 사용하려면 createPopupMenu() 을 재구현할 수 있습니다.

툴바 생성

툴바는 ` QToolBar ` 클래스에서 구현됩니다. ` addToolBar()`를 사용하여 메인 창에 툴바를 추가할 수 있습니다.

툴바의 초기 위치는 특정 ` Qt::ToolBarArea`에 할당하여 제어할 수 있습니다. ` addToolBarBreak() ` 또는 ` insertToolBarBreak()`을 사용하여 툴바 구분선(텍스트 편집에서 줄 바꿈과 유사)을 삽입함으로써 영역을 분할할 수 있습니다. 또한 ` QToolBar::setAllowedAreas()` 및 ` QToolBar::setMovable()`을 사용하여 사용자가 툴바를 배치할 수 있는 위치를 제한할 수도 있습니다.

툴바 아이콘의 크기는 iconSize() 를 사용하여 확인할 수 있습니다. 크기는 플랫폼에 따라 다르며, setIconSize() 를 사용하여 고정 크기를 설정할 수 있습니다. setToolButtonStyle() 를 사용하면 툴바에 있는 모든 툴 버튼의 모양을 변경할 수 있습니다.

다음은 툴바 생성 예시입니다:

    void MainWindow::createToolBars()
    {
        fileToolBar = addToolBar(tr("File"));
        fileToolBar->addAction(newAct);

도크 위젯 생성

도크 위젯은 QDockWidget 클래스에서 구현됩니다. 도크 위젯은 메인 창에 도킹할 수 있는 창입니다. addDockWidget() 를 사용하여 메인 창에 도크 위젯을 추가할 수 있습니다.

Qt::DockWidgetArea 열거형에 정의된 대로 도크 위젯 영역은 왼쪽(left), 오른쪽(right), 위쪽(top), 아래쪽(bottom)의 네 가지가 있습니다. setCorner() 를 사용하여 영역이 겹치는 모서리 부분을 어느 도크 위젯 영역이 차지할지 지정할 수 있습니다. 기본적으로 각 영역에는 도크 위젯의 한 행(수직 또는 수평)만 포함될 수 있지만, setDockNestingEnabled() 를 사용하여 중첩을 활성화하면 도크 위젯을 양방향으로 추가할 수 있습니다.

두 개의 도크 위젯을 서로 겹쳐서 배치할 수도 있습니다. 이 경우 ` QTabBar `를 사용하여 표시할 위젯을 선택합니다.

다음은 도크 위젯을 생성하여 메인 창에 추가하는 방법에 대한 예시입니다:

QDockWidget *dockWidget = new QDockWidget(tr("Dock Widget"), this);
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea |
                            Qt::RightDockWidgetArea);
dockWidget->setWidget(dockWidgetContents);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);

상태 표시줄

setStatusBar() 를 사용하여 상태 표시줄을 설정할 수 있지만, statusBar() (메인 창의 상태 표시줄을 반환하는 함수)가 처음 호출될 때 상태 표시줄이 생성됩니다. 사용 방법에 대한 정보는 QStatusBar 을 참조하십시오.

상태 저장

QMainWindow는 ` saveState()`을 사용하여 레이아웃 상태를 저장할 수 있으며, 나중에 ` restoreState()`을 통해 이를 불러올 수 있습니다. 저장되는 정보는 툴바와 도크 위젯의 위치 및 크기(메인 창의 크기를 기준으로 한 상대적 크기)입니다.

보안 고려 사항

restoreState() 함수는 툴바 및 도크 위젯 레이아웃을 설명하는 버전 관리된 바이너리 블롭을 역직렬화하며, 여기에는 분할 및 탭 형식의 도크 영역에 대한 재귀적으로 중첩된 트리 구조도 포함됩니다. 이 형식의 매직 마커와 버전은 유효성 검증을 거치지만, 외부 구조가 수락된 후에는 도크 영역 인덱스나 중첩된 레이아웃 트리의 깊이와 같은 개별 필드에 대해서는 메인 창의 실제 구성에 대한 경계 검사가 수행되지 않습니다.

restoreState()에는 saveState()에 의해 생성되고, 동일한 버전 또는 호환되는 버전의 애플리케이션(일반적으로 QSettings 를 통해)에 의해 영구 저장된 QByteArray 만 전달하십시오. 네트워크에서 다운로드한 파일, 동기화되거나 공유된 구성 파일, 또는 잠재적으로 손상되었을 수 있는 다른 애플리케이션에서 제공된 데이터와 같이 출처가 불분명하거나 신뢰할 수 없는 데이터로 restoreState()를 호출하지 마십시오.

QMenuBar, QToolBar, QStatusBar, QDockWidget 및 메뉴 예제도참조하십시오 .

멤버 유형 문서

enum QMainWindow::DockOption
flags QMainWindow::DockOptions

이 열거형에는 QMainWindow 의 도킹 동작을 지정하는 플래그가 포함되어 있습니다.

상수값설명
QMainWindow::AnimatedDocks0x01animated 속성과 동일합니다.
QMainWindow::AllowNestedDocks0x02dockNestingEnabled 속성과 동일합니다.
QMainWindow::AllowTabbedDocks0x04사용자는 한 도크 위젯을 다른 도크 위젯 “위에” 드롭할 수 있습니다. 두 위젯은 겹쳐지고, 어느 것을 표시할지 선택할 수 있는 탭 막대가 나타납니다.
QMainWindow::ForceTabbedDocks0x08각 도크 영역에는 탭이 있는 도크 위젯이 하나의 스택으로 포함됩니다. 즉, 도크 영역 내에서 도크 위젯을 나란히 배치할 수 없습니다. 이 옵션이 설정된 경우, AllowNestedDocks는 효과가 없습니다.
QMainWindow::VerticalTabs0x10메인 창의 양쪽에 위치한 두 개의 수직 도크 영역은 탭을 수직으로 표시합니다. 이 옵션이 설정되지 않으면 모든 도크 영역은 탭을 하단에 표시합니다. AllowTabbedDocks를 암시합니다. setTabPosition()도 참조하십시오.
QMainWindow::GroupedDragging0x20도크의 제목 표시줄을 드래그하면, 해당 도크와 탭으로 연결된 모든 탭이 함께 드래그됩니다. AllowTabbedDocks를 암시합니다. 일부 QDockWidget이 배치 가능한 영역에 제한이 있는 경우 제대로 작동하지 않을 수 있습니다. (이 열거형 값은 Qt 5.6에서 추가되었습니다.)

이 옵션들은 QMainWindow 에 도크 위젯을 드롭하는 방식만을 제어합니다. 지정된 옵션에 따라 도크 위젯의 배치를 재조정하지는 않습니다. 따라서 메인 창에 도크 위젯을 추가하기 전에 이 옵션들을 설정해야 합니다. 단, AnimatedDocks 및 VerticalTabs 옵션은 예외로, 언제든지 설정할 수 있습니다.

DockOptions 유형은 QFlags<DockOption>에 대한 typedef입니다. 이 유형은 DockOption 값들의 OR 조합을 저장합니다.

속성 설명서

animated : bool

이 속성은 도크 위젯 및 툴바를 조작할 때 애니메이션 효과가 적용되는지 여부를 결정합니다.

도크 위젯이나 툴바를 메인 창 위로 드래그하면, 메인 창은 해당 도크 위젯이나 툴바를 놓았을 때 도크될 위치를 표시하도록 내용을 조정합니다. 이 속성을 설정하면 QMainWindow 가 내용을 부드러운 애니메이션 효과로 이동시킵니다. 이 속성을 해제하면 내용이 새로운 위치로 즉시 고정됩니다.

기본적으로 이 속성은 설정되어 있습니다. 메인 창에 크기 조정이나 재그리기 속도가 느린 위젯이 포함된 경우 이 속성을 해제할 수 있습니다.

이 속성을 설정하는 것은 ` setDockOptions()`를 사용하여 ` AnimatedDocks ` 옵션을 설정하는 것과 동일합니다.

액세스 함수:

bool isAnimated() const
void setAnimated(bool enabled)

dockNestingEnabled : bool

이 속성은 도크를 중첩할 수 있는지 여부를 결정합니다.

이 속성이 ` false`인 경우, 도크 영역에는 도크 위젯이 한 행(가로 또는 세로)만 포함될 수 있습니다. 이 속성이 ` true`인 경우, 도크 위젯이 차지하는 영역을 양방향으로 분할하여 더 많은 도크 위젯을 포함할 수 있습니다.

도크 중첩은 도크 위젯이 많이 포함된 애플리케이션에서만 필요합니다. 이를 통해 사용자는 메인 창을 구성할 때 더 큰 자유를 누릴 수 있습니다. 그러나 도크 중첩을 사용하면 도크 위젯을 메인 창 위로 드래그할 때, 놓인 도크 위젯이 도크 영역에 배치될 수 있는 방법이 더 많아지기 때문에 동작이 더 복잡해지고(직관성이 떨어지게) 됩니다.

이 속성을 설정하는 것은 setDockOptions()을 사용하여 AllowNestedDocks 옵션을 설정하는 것과 동일합니다.

액세스 함수:

bool isDockNestingEnabled() const
void setDockNestingEnabled(bool enabled)

dockOptions : DockOptions

이 속성은 QMainWindow

기본값은 AnimatedDocks | AllowTabbedDocks 입니다.

액세스 함수:

QMainWindow::DockOptions dockOptions() const
void setDockOptions(QMainWindow::DockOptions options)

documentMode : bool

이 속성은 탭 형식의 도크 위젯에 대한 탭 바가 문서 모드로 설정되어 있는지 여부를 나타냅니다.

기본값은 false입니다.

액세스 함수:

bool documentMode() const
void setDocumentMode(bool enabled)

QTabBar::documentMode도 참조하십시오 .

iconSize : QSize

이 메인 창의 툴바 아이콘 크기.

기본값은 해당 GUI 스타일의 기본 툴바 아이콘 크기입니다. 아이콘은 단순히 축소되어 표시되므로, 사용하는 아이콘의 크기는 이 크기 이상이어야 합니다.

액세스 함수:

QSize iconSize() const
void setIconSize(const QSize &iconSize)

tabShape : QTabWidget::TabShape

이 속성은 탭형 도크 위젯에 사용되는 탭의 모양을 지정합니다.

기본값은 ` QTabWidget::Rounded`입니다.

액세스 함수:

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

setTabPosition()도 참조하십시오 .

toolButtonStyle : Qt::ToolButtonStyle

이 메인 윈도우의 툴바 버튼 스타일.

도구 버튼의 스타일을 시스템 설정에 따르게 하려면 이 속성을 Qt::ToolButtonFollowStyle 로 설정하십시오. 유닉스에서는 데스크톱 환경의 사용자 설정이 사용됩니다. 다른 플랫폼에서는 Qt::ToolButtonFollowStyle 는 아이콘만 표시함을 의미합니다.

기본값은 Qt::ToolButtonIconOnly 입니다.

액세스 함수:

Qt::ToolButtonStyle toolButtonStyle() const
void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)

unifiedTitleAndToolBarOnMac : bool

이 속성은 macOS에서 창이 통합된 제목 표시줄 및 도구 모음 모양을 사용하는지 여부와 관계없이 적용됩니다.

Qt 5 구현은 Qt 4에 비해 몇 가지 제한 사항이 있으므로 주의하십시오:

  • OpenGL 콘텐츠가 포함된 창에서는 이 기능을 사용할 수 없습니다. 여기에는 QOpenGLWidget 도 포함됩니다.
  • 도킹 가능하거나 이동 가능한 툴바를 사용하면 렌더링 오류가 발생할 수 있으므로 권장하지 않습니다.

액세스 함수:

bool unifiedTitleAndToolBarOnMac() const
void setUnifiedTitleAndToolBarOnMac(bool set)

멤버 함수 문서

[explicit] QMainWindow::QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

지정된 ‘ parent ’ 플래그와 지정된 위젯 flags 을 사용하여 QMainWindow를 생성합니다.

QMainWindow는 Qt::Window 플래그를 자체적으로 설정하므로, 항상 최상위 위젯으로 생성됩니다.

[virtual noexcept] QMainWindow::~QMainWindow()

메인 창을 닫습니다.

void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)

메인 창의 지정된 ‘ area ’에 주어진 ‘ dockwidget ’를 추가합니다.

void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)

지정된 area 에 orientation 에서 지정한 방향으로 dockwidget 를 추가합니다.

void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)

이 메인 창에서 지정된 area 에 toolbar 을 추가합니다. toolbar 은 현재 툴바 블록(즉, 줄)의 끝에 배치됩니다. 메인 창이 이미 toolbar 를 관리하고 있는 경우, 툴바를 area 로만 이동시킵니다.

insertToolBar(), addToolBarBreak(), insertToolBarBreak()도 참조하십시오 .

void QMainWindow::addToolBar(QToolBar *toolbar)

addToolBar(Qt::TopToolBarArea, toolbar)를 호출하는 것과 동일합니다.

이것은 오버로드된 함수입니다.

QToolBar *QMainWindow::addToolBar(const QString &title)

QToolBar 객체를 생성하고, 창 제목을 title 로 설정한 후, 상단 툴바 영역에 삽입합니다.

이 함수는 오버로드된 함수입니다.

setWindowTitle()도 참조하십시오 .

void QMainWindow::addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea)

지정된 ` area `에 존재하는 다른 모든 객체 뒤에 툴바 구분선을 추가합니다.

QWidget *QMainWindow::centralWidget() const

메인 창의 중앙 위젯을 반환합니다. 이 함수는 중앙 위젯이 설정되지 않은 경우 ` nullptr `를 반환합니다.

setCentralWidget()도 참조하십시오 .

[override virtual protected] void QMainWindow::contextMenuEvent(QContextMenuEvent *event)

QWidget::contextMenuEvent(QContextMenuEvent *event)를 재구현합니다.

Qt::DockWidgetArea QMainWindow::corner(Qt::Corner corner) const

지정된 corner 를 차지하는 도크 위젯 영역을 반환합니다.

setCorner()도 참조하십시오 .

[virtual] QMenu *QMainWindow::createPopupMenu()

메인 창에 있는 툴바 및 도크 위젯에 대한 선택 가능한 항목이 포함된 팝업 메뉴를 반환합니다. 툴바와 도크 위젯이 없는 경우, 이 함수는 ` nullptr`를 반환합니다.

기본적으로 이 함수는 사용자가 컨텍스트 메뉴를 활성화할 때(일반적으로 툴바나 도크 위젯을 마우스 오른쪽 버튼으로 클릭할 때) 메인 창에서 호출됩니다.

사용자 정의 팝업 메뉴를 생성하려면 이 함수를 재구현하고 새로 생성된 팝업 메뉴를 반환하십시오. 팝업 메뉴의 소유권은 호출자에게 이전됩니다.

addDockWidget(), addToolBar(), menuBar()도 참조하십시오 .

Qt::DockWidgetArea QMainWindow::dockWidgetArea(QDockWidget *dockwidget) const

dockwidget 에 대한 Qt::DockWidgetArea 을 반환합니다. dockwidget 이 메인 창에 추가되지 않은 경우, 이 함수는 Qt::NoDockWidgetArea 을 반환합니다.

addDockWidget(), splitDockWidget(), Qt::DockWidgetArea도 참조하십시오 .

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

QWidget::event(QEvent *event)를 재구현합니다.

[signal] void QMainWindow::iconSizeChanged(const QSize &iconSize)

이 신호는 창에서 사용되는 아이콘의 크기가 변경될 때 발생합니다. 새로운 아이콘 크기는 ` iconSize`에 전달됩니다.

이 신호를 다른 컴포넌트에 연결하여 애플리케이션의 일관된 외관을 유지하는 데 도움을 줄 수 있습니다.

setIconSize()도 참조하십시오 .

void QMainWindow::insertToolBar(QToolBar *before, QToolBar *toolbar)

toolbar 를 before 툴바가 차지하는 영역에 삽입하여, 해당 툴바보다 앞에 표시되도록 합니다. 예를 들어, 일반적인 좌우 방향 레이아웃 환경에서는, toolbar 가 수평 툴바 영역 내에서 before 로 지정된 툴바의 왼쪽에 표시됩니다.

insertToolBarBreak(), addToolBar(), addToolBarBreak()도 참조하십시오 .

void QMainWindow::insertToolBarBreak(QToolBar *before)

before 로 지정된 툴바 앞에 툴바 구분선을 삽입합니다.

메인 창의 메뉴 막대를 반환합니다. 이 함수는 메뉴 막대가 존재하지 않을 경우 빈 메뉴 막대를 생성하여 반환합니다.

Mac 애플리케이션의 모든 창이 하나의 메뉴 막대를 공유하도록 하려면, 이 함수를 사용하여 메뉴 막대를 생성하지 마십시오. 이 함수로 생성된 메뉴 막대는 QMainWindow 를 부모로 갖게 되기 때문입니다. 대신, 부모가 없는 메뉴 막대를 생성한 다음 모든 Mac 창에서 이를 공유해야 합니다. 부모가 없는 메뉴 막대는 다음과 같이 생성할 수 있습니다:

QMenuBar *menuBar = new QMenuBar(nullptr);

setMenuBar()도 참조하십시오 .

메인 창의 메뉴 바를 반환합니다. 이 함수는 메뉴 바가 아직 생성되지 않은 경우 null을 반환합니다.

setMenuWidget()도 참조하십시오 .

void QMainWindow::removeDockWidget(QDockWidget *dockwidget)

메인 창 레이아웃에서 ‘ dockwidget ’를 제거하고 숨깁니다. 단, ‘ dockwidget ’는 삭제 되지 않습니다.

void QMainWindow::removeToolBar(QToolBar *toolbar)

메인 창 레이아웃에서 ‘ toolbar ’를 제거하고 숨깁니다. 단, ‘ toolbar ’는 삭제 되지 않습니다.

void QMainWindow::removeToolBarBreak(QToolBar *before)

before 로 지정된 툴바 앞에 이전에 삽입된 툴바 구분선을 제거합니다.

void QMainWindow::resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)

docks 목록에 있는 도크 위젯의 크기를 sizes 목록에 있는 해당 픽셀 크기로 조정합니다. orientation 이 Qt::Horizontal 인 경우 너비를 조정하고, 그렇지 않은 경우 도크 위젯의 높이를 조정합니다. 크기는 최대 및 최소 크기가 유지되도록 조정되며, QMainWindow 자체의 크기는 변경되지 않습니다. 추가되거나 부족한 공간은 각 위젯의 크기에 따른 상대적 비중을 기준으로 위젯들 사이에 분배됩니다.

예시:

    resizeDocks({blueWidget, yellowWidget}, {20 , 40}, Qt::Horizontal);

파란색 위젯과 노란색 위젯이 같은 수준에 중첩되어 있는 경우, yellowWidget의 크기가 blueWidget의 두 배가 되도록 크기가 조정됩니다.

일부 위젯이 탭으로 그룹화되어 있는 경우, 그룹당 하나의 위젯만 지정해야 합니다. 목록에 포함되지 않은 위젯은 제약 조건을 준수하도록 변경될 수 있습니다.

bool QMainWindow::restoreDockWidget(QDockWidget *dockwidget)

restoreState() 호출 후에 생성된 dockwidget 의 상태를 복원합니다. 상태가 복원된 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.

restoreState() 및 saveState()도 참조하십시오 .

bool QMainWindow::restoreState(const QByteArray &state, int version = 0)

이 메인 윈도우의 툴바와 도크 위젯의 state 을 복원합니다. 또한 모서리 설정도 복원합니다. version 의 값은 state 에 저장된 값과 비교됩니다. 두 값이 일치하지 않으면 메인 윈도우의 상태는 변경되지 않은 채로 유지되며, 이 함수는 false 를 반환합니다. 그렇지 않은 경우 상태가 복원되고, 이 함수는 true 를 반환합니다.

QSettings 를 사용하여 저장된 기하 구조를 복원하려면 다음과 같은 코드를 사용할 수 있습니다:

void MainWindow::readSettings()
{
    QSettings settings("MyCompany", "MyApp");
    restoreGeometry(settings.value("myWidget/geometry").toByteArray());
    restoreState(settings.value("myWidget/windowState").toByteArray());
}

saveState(), QWidget::saveGeometry(), QWidget::restoreGeometry(), restoreDockWidget()도 참조하십시오 .

QByteArray QMainWindow::saveState(int version = 0) const

이 메인 창의 툴바와 도크 위젯의 현재 상태를 저장합니다. 여기에는 setCorner() 함수로 설정할 수 있는 모서리 설정도 포함됩니다. version 번호는 데이터의 일부로 저장됩니다.

objectName 속성은 각 QToolBar 및 QDockWidget 를 식별하는 데 사용됩니다. 이 속성은 메인 윈도우( QToolBar )와 도크 위젯( QDockWidget )에 추가할 때마다 고유해야 합니다. QMainWindow

저장된 상태를 복원하려면 반환 값과 version 번호를 restoreState()에 전달하십시오.

창이 닫힐 때 지오메트리를 저장하려면 다음과 같이 close 이벤트를 구현할 수 있습니다.

void MyMainWindow::closeEvent(QCloseEvent *event)
{
    QSettings settings("MyCompany", "MyApp");
    settings.setValue("geometry", saveGeometry());
    settings.setValue("windowState", saveState());
    QMainWindow::closeEvent(event);
}

restoreState(), QWidget::saveGeometry() 및 QWidget::restoreGeometry()도 참조하십시오 .

void QMainWindow::setCentralWidget(QWidget *widget)

지정된 ` widget `를 메인 창의 중심 위젯으로 설정합니다.

참고: ` QMainWindow `는 ` widget ` 포인터에 대한 소유권을 가져가며, 적절한 시점에 이를 삭제합니다.

centralWidget()도 참조하십시오 .

void QMainWindow::setCorner(Qt::Corner corner, Qt::DockWidgetArea area)

지정된 도크 위젯 area 이 지정된 위치 corner 를 차지하도록 설정합니다.

corner()도 참조하십시오 .

void QMainWindow::setMenuBar(QMenuBar *menuBar)

메인 창의 메뉴 막대를 ‘ menuBar ’로 설정합니다.

참고: ` QMainWindow `는 ` menuBar ` 포인터에 대한 소유권을 인수하고 적절한 시점에 이를 삭제합니다.

menuBar()도 참조하십시오 .

void QMainWindow::setMenuWidget(QWidget *menuBar)

메인 창의 메뉴 바를 ` menuBar`로 설정합니다.

QMainWindow menuBar 포인터의 소유권을 인수하고 적절한 시점에 이를 삭제합니다.

menuWidget()도 참조하십시오 .

void QMainWindow::setStatusBar(QStatusBar *statusbar)

메인 창의 상태 표시줄을 ‘ statusbar ’로 설정합니다.

상태 표시줄을 ` nullptr `로 설정하면 메인 창에서 상태 표시줄이 제거됩니다. ` QMainWindow ` 함수는 ` statusbar ` 포인터에 대한 소유권을 인수하여 적절한 시점에 이를 삭제한다는 점에 유의하십시오.

statusBar()도 참조하십시오 .

void QMainWindow::setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition)

지정된 도크 위젯 areas 의 탭 위치를 지정된 위치 tabPosition 로 설정합니다. 기본적으로 모든 도크 영역은 탭을 하단에 표시합니다.

참고: VerticalTabs 도크옵션은 이 메서드로 설정된 탭 위치를 재정의합니다.

tabPosition() 및 setTabShape()도 참조하십시오 .

void QMainWindow::splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)

first 도크 위젯이 차지하는 공간을 두 부분으로 나누고, first 도크 위젯을 첫 번째 부분으로, second 도크 위젯을 두 번째 부분으로 이동시킵니다.

orientation 는 공간이 어떻게 분할되는지 지정합니다. ‘ Qt::Horizontal ’ 분할 방식에서는 두 번째 도크 위젯이 첫 번째 도크 위젯의 오른쪽에 배치되고, ‘ Qt::Vertical ’ 분할 방식에서는 두 번째 도크 위젯이 첫 번째 도크 위젯의 아래쪽에 배치됩니다.

참고: first 가 현재 탭이 있는 도킹 영역에 있는 경우, second 는 first 의 인접 위젯이 아닌 새로운 탭으로 추가됩니다. 이는 하나의 탭에 도킹 위젯을 하나만 포함할 수 있기 때문입니다.

참고: ` Qt::LayoutDirection `는 분할된 영역의 두 부분에서 도크 위젯의 순서에 영향을 미칩니다. 오른쪽에서 왼쪽으로의 레이아웃 방향이 활성화된 경우, 도크 위젯의 배치 순서가 반대로 바뀝니다.

tabifyDockWidget(), addDockWidget(), removeDockWidget()도 참조하십시오 .

QStatusBar *QMainWindow::statusBar() const

메인 창의 상태 표시줄을 반환합니다. 이 함수는 상태 표시줄이 존재하지 않을 경우 빈 상태 표시줄을 생성하여 반환합니다.

setStatusBar()도 참조하십시오 .

QTabWidget::TabPosition QMainWindow::tabPosition(Qt::DockWidgetArea area) const

area 의 탭 위치를 반환합니다.

참고: ` VerticalTabs ` 도크옵션은 이 함수가 반환하는 탭 위치를 재정의합니다.

setTabPosition() 및 tabShape()도 참조하십시오 .

[signal] void QMainWindow::tabifiedDockWidgetActivated(QDockWidget *dockWidget)

이 신호는 탭을 선택하여 탭 형식으로 구성된 도크 위젯이 활성화될 때 발생합니다. 활성화된 도크 위젯은 ` dockWidget`에 전달됩니다.

tabifyDockWidget() 및 tabifiedDockWidgets()도 참조하십시오 .

QList<QDockWidget *> QMainWindow::tabifiedDockWidgets(QDockWidget *dockwidget) const

dockwidget 와 함께 탭 형태로 그룹화된 도크 위젯을 반환합니다.

tabifyDockWidget()도 참조하십시오 .

void QMainWindow::tabifyDockWidget(QDockWidget *first, QDockWidget *second)

second 도크 위젯을 first 도크 위젯 위로 이동시켜, first 의 현재 위치에 탭이 있는 도크 영역을 생성합니다.

이 함수를 호출하기 전에 두 도크 위젯 모두 addDockWidget()을 사용하여 메인 창에 추가되어 있어야 하며, 둘 중 어느 것도 이미 탭 형태로 구성되어 있어서는 안 됩니다.

tabifiedDockWidgets() 및 addDockWidget()도 참조하십시오 .

QWidget *QMainWindow::takeCentralWidget()

이 메인 창의 중앙 위젯을 제거합니다.

제거된 위젯의 소유권이 호출자에게 전달됩니다.

Qt::ToolBarArea QMainWindow::toolBarArea(const QToolBar *toolbar) const

toolbar 에 대한 Qt::ToolBarArea 를 반환합니다. toolbar 가 메인 창에 추가되지 않은 경우, 이 함수는 Qt::NoToolBarArea 를 반환합니다.

addToolBar(), addToolBarBreak(), Qt::ToolBarArea도 참조하십시오 .

bool QMainWindow::toolBarBreak(QToolBar *toolbar) const

toolbar 앞에 툴바 구분선이 있는지 여부를 반환합니다.

addToolBarBreak() 및 insertToolBarBreak()도 참조하십시오 .

[signal] void QMainWindow::toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle)

이 신호는 창 내 도구 버튼에 사용되는 스타일이 변경될 때 발생합니다. 새로운 스타일은 ` toolButtonStyle`에 전달됩니다.

이 신호를 다른 컴포넌트에 연결하여 애플리케이션의 일관된 외관을 유지할 수 있습니다.

setToolButtonStyle()도 참조하십시오 .

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