애플리케이션 메인 창

메인 창 클래스 개요

이 클래스는 메인 창 자체, 메뉴 및 도구 모음, 상태 표시줄 등 일반적인 최신 메인 애플리케이션 창에 필요한 모든 것을 제공합니다.

QDockWidget

QMainWindow 안에 도킹하거나 바탕화면의 최상위 창으로 플로팅할 수 있는 위젯

QMainWindow

기본 애플리케이션 창

QMdiArea

MDI 창이 표시되는 영역

QMdiSubWindow

QMdiArea의 하위 창 클래스

QMenu

메뉴 막대, 상황에 맞는 메뉴 및 기타 팝업 메뉴에서 사용하기 위한 메뉴 위젯

QMenuBar

가로 메뉴 표시줄

QSizeGrip

최상위 창 크기 조정을 위한 크기 조정 핸들

QStatusBar

상태 정보를 표시하는 데 적합한 가로 막대

QToolBar

컨트롤 세트가 포함된 이동식 패널

QWidgetAction

도구 모음과 같은 액션 기반 컨테이너에 사용자 지정 위젯을 삽입하기 위한 인터페이스로 QAction을 확장합니다.

메인 윈도우 클래스

Qt는 메인 윈도우와 관련 사용자 인터페이스 컴포넌트를 관리하기 위해 다음과 같은 클래스를 제공합니다:

  • QMainWindow 는 응용 프로그램을 빌드할 수 있는 중심 클래스입니다. 동반 클래스인 QDockWidgetQToolBar 클래스와 함께 애플리케이션의 최상위 사용자 인터페이스를 나타냅니다.
  • QDockWidget 는 분리 가능한 도구 팔레트 또는 도우미 창을 만드는 데 사용할 수 있는 위젯을 제공합니다. 도크 위젯은 자체 속성을 추적하며 외부 창으로 이동, 닫기, 띄울 수 있습니다.
  • QToolBar 버튼, 드롭다운 메뉴, 콤보박스, 회전 상자 등 다양한 작업 관련 위젯을 담을 수 있는 일반 도구 모음 위젯을 제공합니다. Qt에서 통합 액션 모델을 강조한다는 것은 툴바가 메뉴 및 키보드 단축키와 잘 협력한다는 것을 의미합니다.

예제 코드

QMainWindow 사용법은 간단합니다. 일반적으로 QMainWindow 서브클래스를 생성하고 QMainWindow 생성자 내에서 메뉴, 도구 모음 및 독 위젯을 설정합니다.

메인 창에 메뉴 표시줄을 추가하려면 메뉴를 생성하고 메인 창의 메뉴 표시줄에 추가합니다. QMainWindow::menuBar () 함수는 처음 호출할 때 메뉴 바를 자동으로 생성합니다. QMainWindow::setMenuBar ()를 호출하여 기본 창에서 사용자 지정 메뉴 모음을 사용할 수도 있습니다.

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ...
    newAct = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentNew),
                         tr("&New"), this);
    newAct->setShortcuts(QKeySequence::New);
    newAct->setStatusTip(tr("Create a new file"));
    connect(newAct, &QAction::triggered, this, &MainWindow::newFile);

    openAct = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen),
                          tr("&Open..."), this);
    openAct->setShortcuts(QKeySequence::Open);
    openAct->setStatusTip(tr("Open an existing file"));
    connect(openAct, &QAction::triggered, this, &MainWindow::open);
    ...

동작이 만들어지면 기본 창 구성 요소에 추가할 수 있습니다. 우선 팝업 메뉴에 추가하세요:

    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(newAct);
    fileMenu->addAction(openAct);
    ...
    fileMenu->addSeparator();
    ...

QToolBarQMenu 클래스는 Qt의 액션 시스템을 사용하여 일관된 API를 제공합니다. 위 코드에서는 QMenu::addAction() 함수를 사용하여 파일 메뉴에 일부 기존 액션을 추가했습니다. QToolBar 에서도 이 함수를 제공하므로 메인 창의 다른 부분에서 액션을 쉽게 재사용할 수 있습니다. 이렇게 하면 불필요한 작업 중복을 방지할 수 있습니다.

기본 창의 자식으로 툴바를 만들고 원하는 작업을 추가합니다:

fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAct);
fileToolBar->addAction(openAct);
    ...
fileToolbar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
addToolBar(Qt::TopToolBarArea, fileToolbar);

이 예에서는 도구 모음이 기본 창의 위쪽 및 아래쪽 도구 모음 영역으로 제한되며 처음에는 위쪽 도구 모음 영역에 배치됩니다. newActopenAct 에서 지정한 작업이 도구 모음과 파일 메뉴에 모두 표시되는 것을 볼 수 있습니다.

QDockWidgetQToolBar 와 비슷한 방식으로 사용됩니다. 메인 창의 자식으로 도크 위젯을 만들고, 도크 위젯의 자식으로 위젯을 추가합니다:

    contentsWindow = new QDockWidget(tr("Table of Contents"), this);
    contentsWindow->setAllowedAreas(Qt::LeftDockWidgetArea
                                  | Qt::RightDockWidgetArea);
    addDockWidget(Qt::LeftDockWidgetArea, contentsWindow);

    headingList = new QListWidget(contentsWindow);
    contentsWindow->setWidget(headingList);

이 예에서 독 위젯은 왼쪽 및 오른쪽 독 영역에만 배치할 수 있으며 처음에는 왼쪽 독 영역에 배치됩니다.

QMainWindow API를 사용하면 도크 위젯 영역의 네 모서리를 차지하는 도크 위젯 영역을 사용자 지정할 수 있습니다. 필요한 경우 QMainWindow::setCorner() 함수를 사용하여 기본값을 변경할 수 있습니다:

setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);

다음 다이어그램은 위의 코드로 생성된 구성을 보여줍니다. 이 레이아웃에서는 왼쪽과 오른쪽 독 위젯이 메인 창의 상단과 하단 모서리를 차지합니다.

모든 기본 창 구성 요소가 설정되면 다음과 유사한 코드를 사용하여 중앙 위젯을 만들고 설치합니다:

QWidget *centralWidget = new QWidget(this);
setCentralWidget(centralWidget);

중앙 위젯은 QWidget 의 모든 하위 클래스가 될 수 있습니다.

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