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 은 QBackingStore 및 Qt의 고도로 최적화된 2D 벡터 그래픽 API인 QPainter 과 함께 사용할 수 있습니다. QPainter 는 선, 폴리곤, 벡터 경로, 이미지 및 텍스트 그리기를 지원합니다. 자세한 내용은 페인트 시스템 및 래스터 창 예제를 참조하십시오.
Qt는 QImage 및 QPixmap 클래스를 사용하여 이미지를 로드하고 저장할 수 있습니다. 기본적으로 Qt는 JPEG와 PNG를 포함한 가장 일반적인 이미지 형식을 지원합니다. 사용자는 QImageIOPlugin 클래스를 통해 추가 포맷에 대한 지원을 추가할 수 있습니다. 자세한 내용은 이미지 파일 읽기 및 쓰기를 참조하십시오.
Qt의 타이포그래피는 QPainter API와 Qt의 폰트 클래스, 주로 QFont 를 함께 사용하는 QTextDocument 로 이루어집니다. 텍스트와 폰트 처리보다 더 낮은 수준의 API를 선호하는 어플리케이션은 QRawFont 와 QGlyphRun 와 같은 클래스를 사용할 수 있습니다.
RHI 그래픽
Qt 렌더링 하드웨어 인터페이스는 OpenGL, OpenGL ES, Direct3D, Metal 및 Vulkan과 같은 하드웨어 가속 그래픽 API를 위한 추상화입니다.
QWindow, QRhi 및 관련 클래스는 셰이더 컨디셔닝 및 트랜스파일링 파이프라인으로 보완된 이식 가능한 크로스 플랫폼 3D 그래픽 및 컴퓨팅 API를 제공합니다. 이렇게 하면 애플리케이션이 단일 공급업체 또는 플랫폼별 3D API에 직접적으로 의존하는 것을 피할 수 있습니다.
아래는 주요 RHI 관련 클래스 목록입니다. 이러한 클래스는 여러 추가 클래스와 구조체로 보완됩니다.
- QRhi
- QShader
- QShaderDescription
- QRhiCommandBuffer
- QRhiResourceUpdateBatch
- QRhiBuffer
- QRhiRenderBuffer
- QRhiTexture
- QRhiSampler
- QRhiTextureRenderTarget
- QRhiShaderResourceBindings
- QRhiGraphicsPipeline
- QRhiComputePipeline
- QRhiSwapChain
QWindow QRhi 을 사용하여 가속화된 3D 렌더링을 수행하는 휴대용 크로스 플랫폼 애플리케이션을 만드는 입문용 예제는 RHI 창 예제를 참조하세요.
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 로 형식 속성을 선택한 다음 QOpenGLContext 을 생성하여 네이티브 OpenGL 컨텍스트를 관리하면 활성화됩니다. 또한, Qt에는 OpenGL 가속 QPainter 렌더링을 사용할 수 있는 QOpenGLPaintDevice 와 OpenGL 코드 작성을 단순화하고 확장 처리의 복잡성과 OpenGL ES 2와 데스크톱 OpenGL의 차이점을 숨기는 편의 클래스가 있습니다. 편의 클래스에는 애플리케이션이 OpenGL 함수 포인터를 수동으로 확인할 필요 없이 데스크톱 OpenGL의 모든 OpenGL ES 2 함수를 사용할 수 있는 QOpenGLFunctions 이 포함됩니다. 이를 통해 모바일 또는 임베디드 디바이스를 대상으로 하는 애플리케이션의 크로스 플랫폼 개발이 가능하며, 네이티브 OpenGL 기능을 보다 간단한 Qt API로 래핑하는 클래스를 제공합니다:
- QOpenGLBuffer
- QOpenGLFramebufferObject
- QOpenGLShaderProgram
- QOpenGLTexture
- QOpenGLDebugLogger
- QOpenGLTimerQuery
- QOpenGLVertexArrayObject
마지막으로, 최신 버전(3.0 이상)의 OpenGL에 대한 더 나은 지원을 제공하기 위해 버전별 함수 래퍼 메커니즘도 사용할 수 있습니다: QOpenGLFunction_N_N 클래스 제품군은 주어진 OpenGL 버전과 프로파일의 모든 함수를 노출하므로 최신 데스크톱 전용 OpenGL 기능에 의존하는 데스크톱 애플리케이션을 쉽게 개발할 수 있습니다.
자세한 내용은 OpenGL 창 예제를 참조하세요.
QSurface::OpenGLSurface 으로 만든 QWindow 을 QPainter 및 QOpenGLPaintDevice 과 함께 사용하면 시각적 품질을 일부 희생하여 OpenGL 하드웨어 가속 2D 그래픽을 사용할 수 있습니다.
벌칸 통합
Qt GUI 은 Vulkan API를 지원합니다. Qt 애플리케이션을 사용하려면 LunarG Vulkan SDK가 필요합니다.
Windows에서는 SDK가 환경 변수 VULKAN_SDK
를 설정하고 configure
스크립트에서 이를 감지합니다.
Android에서는 NDK의 API 레벨 24에 Vulkan 헤더가 추가되었습니다.
로우레벨 벌칸 지원을 위한 주요 관련 클래스는 다음과 같습니다:
또한 QVulkanWindow 은 QWindow 의 편리한 하위 클래스를 제공하여 QWindow 을 대상으로 하는 Vulkan 기반 렌더링 구현을 쉽게 시작할 수 있습니다. 이 헬퍼 클래스를 사용하는 것은 전적으로 선택 사항이며, 고급 Vulkan 기반 렌더러를 사용하는 애플리케이션은 대신 QSurface::VulkanSurface 유형이 포함된 QWindow 을 직접 사용할 수 있습니다.
자세한 내용은 헬로 벌칸 위젯 예제 및 헬로 벌칸 트라이앵글 예제를 참조하세요.
드래그 앤 드롭
Qt GUI 에는 드래그 앤 드롭이 지원됩니다. 자세한 내용은 드래그 앤 드롭 개요를 참조하세요.
© 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.