이 페이지에서

Qt GUI 개요

Qt GUI 모듈은 윈도우 시스템 통합, 이벤트 처리, OpenGL 및 OpenGL ES 통합, 2D 그래픽, 기본 이미징, 글꼴 및 텍스트를 위한 클래스를 제공합니다. 이러한 클래스는 Qt의 사용자 인터페이스 기술에서 내부적으로 사용되지만, 예를 들어 저수준 OpenGL ES 그래픽 API를 사용하여 애플리케이션을 작성하는 경우와 같이 직접 사용할 수도 있습니다.

사용자 인터페이스를 작성하는 애플리케이션 개발자를 위해 Qt는 Qt GUI 모듈에 포함된 엔이블러보다 훨씬 더 적합한 Qt Quick 와 같은 상위 수준 API를 제공합니다.

애플리케이션 창

Qt GUI 모듈에서 가장 중요한 클래스는 QGuiApplication 와 QWindow 입니다. 화면에 콘텐츠를 표시하려는 Qt 애플리케이션은 이 클래스를 사용해야 합니다. QGuiApplication 에는 메인 이벤트 루프가 포함되어 있으며, 여기서 윈도우 시스템 및 기타 소스에서 발생하는 모든 이벤트가 처리되고 전달됩니다. 또한 이 클래스는 애플리케이션의 초기화 및 종료 처리도 담당합니다.

QWindow 클래스는 기본 윈도우 시스템 내의 창을 나타냅니다. 이 클래스는 터치 입력, 노출, 포커스, 키 입력, 기하학적 변화 등 윈도우 시스템에서 발생하는 이벤트(QEvent)를 처리하기 위한 여러 가상 함수를 제공합니다.

2D 그래픽

Qt GUI 모듈에는 2D 그래픽, 이미징, 글꼴 및 고급 타이포그래피를 위한 클래스가 포함되어 있습니다.

QSurface::RasterSurface 표면 유형으로 생성된 QWindow 는 Qt의 고도로 최적화된 2D 벡터 그래픽 API인 QBackingStore 및 QPainter 와 함께 사용할 수 있습니다. QPainter 는 선, 다각형, 벡터 경로, 이미지 및 텍스트 그리기를 지원합니다. 자세한 내용은 페인트 시스템 및 래스터 창 예제를 참조하십시오.

Qt는 ` QImage ` 및 ` QPixmap ` 클래스를 사용하여 이미지를 불러오고 저장할 수 있습니다. 기본적으로 Qt는 JPEG, PNG 등을 포함한 가장 일반적인 이미지 형식을 지원합니다. 사용자는 ` QImageIOPlugin ` 클래스를 통해 추가 형식에 대한 지원을 추가할 수 있습니다. 자세한 내용은 ‘이미지 파일 읽기 및 쓰기’를 참조하십시오.

Qt의 타이포그래피는 ` QTextDocument`을 통해 구현되며, 이는 ` QPainter ` API를 Qt의 글꼴 클래스(주로 ` QFont`)와 결합하여 사용합니다. 텍스트 및 글꼴 처리에 더 저수준의 API를 선호하는 애플리케이션은 ` QRawFont ` 및 ` QGlyphRun`와 같은 클래스를 사용할 수 있습니다.

RHI 그래픽

Qt 렌더링 하드웨어 인터페이스(RHI Graphics)는 OpenGL, OpenGL ES, Direct3D, Metal, Vulkan과 같은 하드웨어 가속 그래픽 API를 추상화한 것입니다.

QWindow 에 렌더링하기 위해 OpenGL이나 Vulkan을 직접 사용하는 대신, QRhi 및 관련 클래스는 셰이더 조건 처리 및 트랜스파일링 파이프라인으로 보완된 이식성 있는 크로스 플랫폼 3D 그래픽 및 컴퓨팅 API를 제공합니다. 이를 통해 애플리케이션은 단일한, 그리고 경우에 따라 벤더나 플랫폼에 특화된 3D API에 직접 의존하는 것을 피할 수 있습니다.

다음은 주요 RHI 관련 클래스 목록입니다. 이 외에도 여러 추가 클래스와 구조체가 제공됩니다.

QRhi 를 사용하여 QWindow 에 가속화된 3D 렌더링을 수행하는 이식성 높은 크로스 플랫폼 애플리케이션을 만드는 입문용 예제는 RHI Window 예제를 참조하십시오.

QWindow 를 직접 사용하는 것은 QRhi API를 활용한 렌더링 방법 중 가장 고급이며, 대개 가장 유연한 방식입니다. 그러나 이는 가장 저수준의 접근 방식이며, Qt의 UI 기술, 위젯 및 Qt Quick 를 전혀 활용하지 못한다는 점에서 한계가 있습니다. 대부분의 경우, 애플리케이션은 QRhi 기반 렌더링을 위젯이나 Qt Quick 기반 사용자 인터페이스에 통합하기를 원할 것입니다. QWidget-기반 애플리케이션은 QWidget::createWindowContainer()를 통해 창을 위젯 계층 구조에 네이티브 자식 요소로 삽입할 수 있지만, 대부분의 경우 QRhiWidget 를 사용하면 QRhi-기반 렌더링을 위젯 UI에 통합하는 데 더 편리한 방법을 제공합니다. Qt Quick 는 QRhi-기반 사용자 정의 렌더링을 통해 2D/3D 씬을 확장하기 위한 자체적인 일련의 기능을 제공합니다.

참고: RHI API계열은 일반 Qt 공개 API와 달리 현재 제한된 호환성 보장이 제공됩니다. 자세한 내용은 QRhi 을 참조하십시오.

3D 행렬 및 벡터 연산

Qt GUI 모듈에는 3D 그래픽과 관련된 가장 일반적인 수학 연산을 지원하는 몇 가지 수학 클래스도 포함되어 있습니다. 이러한 클래스에는 QMatrix4x4, QVector2D, QVector3D, QVector4D 및 QQuaternion 가 있습니다.

OpenGL 및 OpenGL ES 통합

QWindow 는 플랫폼이 지원하는 기능에 따라 OpenGL 및 OpenGL ES를 사용한 렌더링을 지원합니다. OpenGL 렌더링을 활성화하려면 ` QWindow`의 표면 유형을 ` QSurface::OpenGLSurface`로 설정하고, ` QSurfaceFormat`로 형식 속성을 선택한 다음, 네이티브 OpenGL 컨텍스트를 관리할 ` QOpenGLContext `를 생성하면 됩니다. 또한 Qt에는 OpenGL 가속 QPainter 렌더링을 사용할 수 있게 해주는 ` QOpenGLPaintDevice`와, OpenGL 코드 작성을 간소화하고 확장 기능 처리의 복잡성 및 OpenGL ES 2와 데스크톱 OpenGL 간의 차이점을 숨겨주는 편의 클래스가 포함되어 있습니다. 이러한 편의 클래스에는 애플리케이션이 OpenGL 함수 포인터를 수동으로 변환할 필요 없이 데스크톱 OpenGL에서 모든 OpenGL ES 2 함수를 사용할 수 있게 해주는 ` QOpenGLFunctions `가 포함됩니다. 이를 통해 모바일 또는 임베디드 장치를 대상으로 하는 애플리케이션의 크로스 플랫폼 개발이 가능해지며, 네이티브 OpenGL 기능을 더 간단한 Qt API로 래핑하는 클래스가 제공됩니다:

마지막으로, 최신 버전의 OpenGL(3.0 이상)을 더 잘 지원하기 위해 버전 기반 함수 래퍼 메커니즘도 제공됩니다: QOpenGLFunction_N_N 클래스 계열은 주어진 OpenGL 버전 및 프로파일의 모든 함수를 노출하여, 최신 데스크톱 전용 OpenGL 기능을 활용하는 데스크톱 애플리케이션을 손쉽게 개발할 수 있게 해줍니다.

자세한 내용은 OpenGL 창 예제를 참조하십시오.

QSurface::OpenGLSurface 로 생성된 ` QWindow `은 ` QPainter ` 및 ` QOpenGLPaintDevice `과 함께 사용하면, 일부 시각적 품질을 희생하는 대신 OpenGL 하드웨어 가속 2D 그래픽을 구현할 수 있습니다.

Vulkan 통합

Qt GUI Vulkan API를 지원합니다. Qt 애플리케이션은 LunarG Vulkan SDK가 설치되어 있어야 합니다.

Windows에서는 이 SDK가 환경 변수 ` VULKAN_SDK`를 설정하며, 이 변수는 ` configure ` 스크립트에 의해 감지됩니다.

Android에서는 NDK의 API 레벨 24부터 Vulkan 헤더가 추가되었습니다.

저수준 Vulkan 지원을 위한 주요 관련 클래스는 다음과 같습니다:

또한, ` QVulkanWindow `은 ` QWindow `의 편리한 서브클래스를 제공하여, ` QWindow`을 대상으로 하는 Vulkan 기반 렌더링 구현을 더 쉽게 시작할 수 있게 해줍니다. 이 헬퍼 클래스의 사용은 전적으로 선택 사항이며, 보다 고급 Vulkan 기반 렌더러를 사용하는 애플리케이션의 경우 대신 ` QSurface::VulkanSurface ` 유형의 ` QWindow `을 직접 사용할 수도 있습니다.

자세한 내용은 ‘Hello Vulkan 위젯 예제 ’와 ‘Hello Vulkan 삼각형 예제’를 참조하십시오.

드래그 앤 드롭

Qt GUI 드래그 앤 드롭을 지원합니다. 드래그 앤 드롭 개요에서 자세한 내용을 확인할 수 있습니다.

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