신입 개발자 공부 과정

QMainWindow: Qt의 메인 창 관리 클래스 본문

C++/공부

QMainWindow: Qt의 메인 창 관리 클래스

Lewisjkim 2024. 11. 27. 11:39

QMainWindow는 Qt에서 애플리케이션의 메인 창을 생성하고 관리하는 데 사용되는 핵심 클래스입니다. 이 클래스는 기본적인 사용자 인터페이스의 틀을 제공하며, 메뉴, 도구 모음, 상태 표시줄 등을 손쉽게 추가할 수 있는 기능을 제공합니다.

아래는 QMainWindow의 주요 특징과 사용법에 대한 요약입니다.


1. QMainWindow의 주요 구성 요소

QMainWindow는 다음과 같은 표준 구성 요소를 포함할 수 있습니다:

  • Central Widget (중앙 위젯)
    메인 콘텐츠를 표시하는 영역으로, 반드시 하나의 위젯만 설정할 수 있습니다.
    QWidget *widget = new QWidget(this); setCentralWidget(widget);
  • Menu Bar (메뉴 바)
    메뉴 항목을 포함하는 상단 바입니다. menuBar() 메서드를 사용해 접근하거나 사용자 정의 메뉴를 추가할 수 있습니다.
    QMenu *fileMenu = menuBar()->addMenu("File"); fileMenu->addAction("Open");
  • Tool Bar (도구 모음)
    빠른 작업을 위한 도구 아이콘들을 배치합니다. addToolBar() 메서드로 쉽게 추가할 수 있습니다.
    QToolBar *toolBar = addToolBar("Main Toolbar"); 
    toolBar->addAction("Save");


  • Status Bar (상태 표시줄)
    애플리케이션의 상태 정보를 표시합니다. statusBar() 메서드를 사용해 메시지를 추가하거나 업데이트할 수 있습니다.
    statusBar()->showMessage("Ready");


  • Dock Widgets (도킹 위젯)
    추가적인 도구나 정보 패널을 제공하며, 메인 창의 주변으로 배치할 수 있습니다.
    QDockWidget *dock = new QDockWidget("Dock", this); 
    addDockWidget(Qt::LeftDockWidgetArea, dock);

2. 생성자와 기본 설정

QMainWindow는 기본적으로 다음과 같이 생성할 수 있습니다:

QMainWindow *mainWindow = new QMainWindow();
mainWindow->setWindowTitle("My Application");
mainWindow->resize(800, 600);
  • 창 제목 설정: setWindowTitle() 메서드 사용
  • 창 크기 조정: resize() 또는 setGeometry() 메서드 사용

3. 주요 메서드

  • setCentralWidget(QWidget *widget)
    중앙 콘텐츠 위젯을 설정합니다.
  • menuBar()
    메뉴 바 객체를 반환합니다.
  • addToolBar(const QString &title)
    도구 모음을 추가합니다.
  • statusBar()
    상태 표시줄 객체를 반환합니다.
  • addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockWidget)
    도킹 위젯을 지정된 위치에 추가합니다.

4. QMainWindow를 활용한 간단한 예제

#include <QApplication>
#include <QMainWindow>
#include <QMenu>
#include <QToolBar>
#include <QStatusBar>
#include <QWidget>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QMainWindow mainWindow;
    mainWindow.setWindowTitle("QMainWindow Example");

    // 중앙 위젯 설정
    QWidget *centralWidget = new QWidget();
    mainWindow.setCentralWidget(centralWidget);

    // 메뉴 바 추가
    QMenu *fileMenu = mainWindow.menuBar()->addMenu("File");
    fileMenu->addAction("Open");
    fileMenu->addAction("Exit");

    // 도구 모음 추가
    QToolBar *toolBar = mainWindow.addToolBar("Main Toolbar");
    toolBar->addAction("Save");

    // 상태 표시줄 메시지 설정
    mainWindow.statusBar()->showMessage("Application is ready");

    mainWindow.resize(800, 600);
    mainWindow.show();

    return app.exec();
}

5. 사용 시 유의사항

  • 중앙 위젯은 하나만 설정 가능: setCentralWidget()은 단 하나의 위젯만 받을 수 있으므로, 복잡한 레이아웃이 필요하다면 QWidget과 레이아웃 관리자를 조합해야 합니다.
  • 도킹 위젯 관리: 도킹 위젯은 사용자가 재배치할 수 있도록 기본적으로 지원하지만, 특정 위치에 고정하려면 setFeatures()를 활용해 제어할 수 있습니다.

QMainWindow는 직관적인 API와 풍부한 기능으로 데스크톱 애플리케이션 개발에 최적화된 클래스입니다. 이를 활용하면, 사용자가 기대하는 고급 사용자 인터페이스를 손쉽게 구현할 수 있습니다.

ChatGpt 요약 내용