창 및 대화 상자 위젯
부모 위젯에 내장되지 않은 위젯을 창이라고 합니다. 일반적으로 창에는 프레임과 제목 표시줄이 있지만, 적절한 창 플래그를 사용하여 이러한 장식 요소가 없는 창을 만들 수도 있습니다. Qt에서는 ` QMainWindow `와 ` QDialog `의 다양한 하위 클래스가 가장 일반적인 창 유형입니다.
애플리케이션에서 창은 사용자 인터페이스가 구축되는 화면 공간을 제공합니다. 창은 애플리케이션들을 시각적으로 서로 구분해 주며, 일반적으로 사용자의 선호에 따라 애플리케이션의 크기를 조정하고 위치를 변경할 수 있도록 하는 창 장식을 제공합니다. 창은 일반적으로 데스크톱 환경에 통합되며, 데스크톱 환경이 제공하는 창 관리 시스템에 의해 어느 정도 관리됩니다. 예를 들어, 애플리케이션의 선택된 창은 작업 표시줄에 표시됩니다.
주 창과 보조 창
부모가 없는 모든 인스턴스( QWidget )는 창이 되며, 대부분의 플랫폼에서 데스크톱의 작업 표시줄에 나열됩니다. 이는 일반적으로 애플리케이션 내의 하나의 창, 즉 주 창( primary window)에 대해서만 원하는 기능입니다.
또한, 부모 창이 있는 QWidget 도 ` Qt::Window ` 플래그를 설정함으로써 창이 될 수 있습니다. 창 관리 시스템에 따라 이러한 보조 창들은 대개 해당 부모 창 위에 겹쳐져 표시되며, 별도의 작업 표시줄 항목은 생성되지 않습니다.
QMainWindow 클래스는 창으로 사용되도록 설계되었으며 자식 위젯에는 필요하지 않은 기능을 제공하므로, 생성자에서 Qt::Window 플래그를 설정합니다.
메인 윈도우와 대화 상자
Application Main Window는 애플리케이션의 주요 사용자 인터페이스를 구축하기 위한 프레임워크를 제공하며, ` QMainWindow`을 서브클래싱하여 생성됩니다. ` QMainWindow `은 자체 레이아웃을 가지고 있으며, 여기에 ` menu bar`, ` tool bars`, ` dockable widgets ` 및 ` status bar`을 추가할 수 있습니다. 중앙 영역은 어떤 종류의 ` QWidget`으로도 채울 수 있습니다.
대화 상자(Dialog Window )는 사용자에게 옵션과 선택 사항을 제시하는 보조 창으로 사용됩니다. 대화 상자는 ` QDialog `을 서브클래싱하고 위젯 및 레이아웃을 사용하여 사용자 인터페이스를 구현함으로써 생성됩니다. 또한 Qt는 파일 선택이나 글꼴 선택과 같은 표준 작업에 사용할 수 있는 다양한 기성 표준 대화 상자를 제공합니다.
메인 창과 대화 상자 모두 Qt의 시각적 디자인 도구인 Qt Widgets Designer 를 사용하여 생성할 수 있습니다. Qt Widgets Designer 를 사용하면 직접 코딩하는 것보다 훨씬 빠르며, 다양한 디자인 아이디어를 쉽게 테스트해 볼 수 있습니다. 시각적으로 디자인을 만들고 uic가 생성한 코드를 읽어보는 것은 Qt를 배우는 훌륭한 방법입니다!
창의 기하 구조
QWidget 는 위젯의 기하학적 속성을 다루는 여러 함수를 제공합니다. 이 함수 중 일부는 순수한 클라이언트 영역(즉, 창 테두리를 제외한 창)을 대상으로 작동하고, 다른 함수들은 창 테두리를 포함합니다. QWidget 는 가장 일반적인 사용 사례를 투명하게 처리할 수 있도록 이러한 함수들을 구분합니다.
- 창 테두리 포함: x(), y(), frameGeometry(), pos(), move().
- 창틀을 제외한 경우: geometry(), width(), height(), rect(), size().
이 구분은 데코레이션이 적용된 최상위 위젯에만 적용된다는 점에 유의하십시오. 모든 자식 위젯의 경우, 프레임 지오메트리는 위젯의 클라이언트 지오메트리와 동일합니다.
이 다이어그램은 사용 중인 대부분의 함수를 보여줍니다:
X11의 특이점
X11에서 창은 창 관리자가 장식을 적용하기 전까지는 테두리가 없습니다. 이는 ` QWidget::show()`를 호출한 후 창이 첫 번째 페인트 이벤트를 수신하기 전 어느 시점에서 비동기적으로 발생하거나, 아예 발생하지 않을 수도 있습니다. X11은 정책이 없다는 점(다른 사람들은 이를 유연하다고 부릅니다)을 명심하십시오. 따라서 창이 어떤 장식 프레임을 갖게 될지에 대해 안전한 가정을 할 수 없습니다. 기본 규칙: 항상 여러분의 가정을 무너뜨리는 창 관리자를 사용하는 사용자가 한 명은 있으며, 그 사용자가 여러분에게 불만을 제기할 것입니다.
게다가 툴킷은 단순히 화면에 창을 배치할 수 없습니다. Qt가 할 수 있는 일은 창 관리자에게 특정 힌트를 보내는 것뿐입니다. 별도의 프로세스인 창 관리자는 이 힌트를 따르거나, 무시하거나, 오해할 수도 있습니다. 부분적으로 불명확한 ICCCM(Inter-Client Communication Conventions Manual)으로 인해, 기존 창 관리자들마다 창 배치 방식이 다르게 처리됩니다.
X11은 창이 장식된 후 프레임 지오메트리를 가져올 수 있는 표준적이거나 쉬운 방법을 제공하지 않습니다. Qt는 오늘날 존재하는 다양한 윈도우 매니저에서 작동하는 기발한 휴리스틱과 정교한 코드를 통해 이 문제를 해결합니다. 하지만 QWidget::frameGeometry()가 잘못된 결과를 반환하는 윈도우 매니저를 발견하더라도 놀라지 마십시오.
또한 X11은 창을 최대화하는 방법을 제공하지 않습니다. ` QWidget::showMaximized()`는 이 기능을 에뮬레이트해야 합니다. 이 함수의 결과는 ` QWidget::frameGeometry()`의 결과와 창 관리자가 적절한 창 배치를 수행할 수 있는 능력에 따라 달라지는데, 이 두 가지 모두 보장될 수 없습니다.
Wayland의 특이점
Wayland에서는 클라이언트 측에서 최상위 창의 위치를 프로그래밍 방식으로 설정하거나 가져오는 기능이 일반적으로 지원되지 않습니다. 기술적으로 말하자면, 이는 셸 인터페이스에 따라 다릅니다. 그러나 일반적인 데스크톱 컴포지터의 경우, 기본 셸 인터페이스는 XDG Shell 이며, 이는 창을 수동으로 배치하는 기능을 지원하지 않습니다. 이러한 경우, Qt는 창의 최상위 위치를 설정하려는 호출을 무시하며, 위치를 조회할 때 창의 위치는 항상 QPoint(0, 0)으로 반환됩니다.
© 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.