창 및 대화 상자 위젯
상위 위젯에 포함되지 않은 위젯을 창이라고 합니다. 일반적으로 창에는 프레임과 제목 표시줄이 있지만, 적절한 창 플래그를 사용하여 이러한 장식 없이 창을 만들 수도 있습니다. Qt에서는 QMainWindow 와 QDialog 의 다양한 서브클래스가 가장 일반적인 창 유형입니다.
응용 프로그램에서 창은 사용자 인터페이스가 구축되는 화면 공간을 제공합니다. 윈도우는 애플리케이션을 시각적으로 서로 구분하며, 일반적으로 사용자의 선호에 따라 애플리케이션의 크기와 위치를 조정할 수 있는 창 장식을 제공합니다. Windows는 일반적으로 데스크톱 환경에 통합되어 있으며 데스크톱 환경이 제공하는 창 관리 시스템에 의해 어느 정도 관리됩니다. 예를 들어, 애플리케이션에서 선택한 창은 작업 표시줄에 표시됩니다.
기본 및 보조 창
부모가 없는 QWidget 은 창이 되며, 대부분의 플랫폼에서 데스크톱의 작업 표시줄에 나열됩니다. 이는 일반적으로 애플리케이션에서 하나의 창, 즉 기본 창에만 필요합니다.
또한 부모가 있는 QWidget 은 Qt::Window 플래그를 설정하여 창이 될 수 있습니다. 창 관리 시스템에 따라 이러한 보조 창은 일반적으로 해당 상위 창 위에 겹쳐서 표시되며 자체 작업 표시줄 항목이 없습니다.
QMainWindow 클래스는 창으로 사용하도록 설계되어 자식 위젯에 필요하지 않은 기능을 제공하므로 생성자에 Qt::Window 플래그를 설정합니다.
기본 창 및 대화 상자
애플리케이션 메인 창은 애플리케이션의 메인 사용자 인터페이스를 구축하기 위한 프레임워크를 제공하며 QMainWindow 을 서브클래싱하여 생성됩니다. QMainWindow 에는 menu bar, tool bars, dockable widgets 및 status bar 을 추가할 수 있는 자체 레이아웃이 있습니다. 중앙 영역은 어떤 종류의 QWidget 으로도 채울 수 있습니다.
대화창은 옵션과 선택 사항을 표시하는 보조 창으로 사용됩니다. 대화 상자는 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)로 인해 기존 창 관리자에서는 창 배치가 다르게 처리됩니다.
X11은 창을 장식한 후 프레임 지오메트리를 가져오는 표준적이거나 쉬운 방법을 제공하지 않습니다. Qt는 현재 존재하는 다양한 창 관리자에서 작동하는 멋진 휴리스틱과 영리한 코드로 이 문제를 해결합니다. QWidget::frameGeometry ()가 잘못된 결과를 반환하는 경우를 발견하더라도 놀라지 마세요.
X11은 창을 최대화하는 방법도 제공하지 않습니다. QWidget::showMaximized()는 이 기능을 에뮬레이트해야 합니다. 그 결과는 QWidget::frameGeometry()의 결과와 창 관리자의 적절한 창 배치 기능에 따라 달라지며, 어느 쪽도 보장할 수 없습니다.
웨일랜드 특성
Wayland에서는 클라이언트 측에서 최상위 창 위치를 프로그래밍 방식으로 설정하거나 가져오는 기능은 일반적으로 지원되지 않습니다. 기술적으로 말하면 셸 인터페이스에 따라 다릅니다. 그러나 일반적인 데스크톱 컴포저의 경우 기본 셸 인터페이스는 XDG Shell
이며, 수동 창 위치 지정은 지원하지 않습니다. 이러한 경우 Qt는 창의 최상위 위치를 설정하는 호출을 무시하며, 쿼리 시 창 위치는 항상 QPoint(0, 0)으로 반환됩니다.
© 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.