Qt GUI 概述

Qt GUI 模塊提供用於窗口係統集成、事件處理、OpenGL 和 OpenGL ES 集成、2D 圖形、基本成像、字體及文本的類。這些類用於 Qt UI (用戶界麵) 技術內部,但也可以直接使用 (例如:使用低級 OpenGL ES 圖形 API 編寫應用程序)。

對於編寫用戶界麵的應用程序開發者而言,Qt 提供更高級 API,像 Qt Quick,比 Qt GUI 模塊中找到的使能器更閤適。

應用程序窗口

Qt GUI 模塊最重要的類是 QGuiApplication and QWindow 。Qt 應用程序想要在屏幕上展示內容,就必須使用這些。 QGuiApplication 包含主事件循環,來自窗口係統和其它源的所有事件都會被處理和分派。它還處理應用程序的初始化及定稿。

The QWindow 類錶示在底層窗口係統中的窗口。它提供許多虛函數以處理事件 ( QEvent ) 來自窗口係統,譬如:觸摸輸入、暴露、聚焦、擊鍵及幾何體變化。

2D 圖形

Qt GUI 模塊包含用於 2D 圖形、成像、字體及高級排版的類。

A QWindow 創建采用錶麵類型 QSurface::RasterSurface 可以用於組閤 QBackingStore and QPainter ,Qt 高度優化的 2D 嚮量圖形 API。 QPainter 支持繪製綫條、多邊形、嚮量路徑、圖像及文本。更多信息,見 描繪係統 and 光柵窗口範例 .

Qt 可以加載和保存圖像,使用 QImage and QPixmap 類。默認情況下,Qt 支持最常見的圖像格式,包括 JPEG 和 PNG 等。用戶可以添加支持其它格式憑藉 QImageIOPlugin 類。更多信息,見 讀寫圖像文件 .

Qt 中的排印是采用 QTextDocument ,使用 QPainter API 組閤 Qt 的字體類,首要是 QFont 。偏好更低級 API 而不是文本和字體處理的應用程序,可以使用的類像 QRawFont and QGlyphRun .

RHI 圖形

QRhi (Qt 渲染硬件接口) 是硬件加速圖形 API 的抽象,譬如 OpenGL , OpenGL ES , Direct3D , Metal ,和 Vulkan .

作為替代是使用 OpenGL (或 Vulkan) 直接渲染到 QWindow , QRhi 和相關類提供瞭可移植的、跨平颱的 3D 圖形,通過著色器調節和傳輸管道的計算 API。這種方式的應用程序可以避免直接依賴於單一,和在某些情況下的供應商 (或特定平颱 3D API)。

以下是 RHI (渲染硬件接口) 主要相關類的列錶。這些是很多額外類和結構的補充。

RHI 窗口範例 瞭解創建可移植的介紹性範例,跨平颱應用程序履行加速 3D 渲染是在 QWindow 使用 QRhi .

直接操控 QWindow 最先進,而最靈活的渲染方式經常是采用 QRhi API。不管怎樣,它是最低級方式,且在 Qt 的 UI 技術、Widget 及 Qt Quick 根本未被利用的意義方麵受限。在很多情況下,應用程序更想要集成 QRhi 基渲染到 widget 或 Qt Quick 基用戶界麵。 QWidget 基應用程序可以選擇把窗口作為本機子級嵌入到 Widget 層次結構,憑藉 QWidget::createWindowContainer (),但在很多情況下, QRhiWidget 會提供更方便使能器以集成 QRhi 基渲染到 Widget UI。Qt Quick 提供瞭自己的一組使能器以擴展 2D/3D 場景采用 QRhi 基自定義渲染。

注意: 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 擁有 QOpenGLPaintDevice ,啓用使用 OpenGL 加速 QPainter 渲染,還有方便類以簡化 OpenGL 代碼的編寫,隱藏擴展處理的復雜性及 OpenGL ES 2 和桌麵 OpenGL 之間的差異。方便類包括 QOpenGLFunctions 讓應用程序在桌麵 OpenGL 中使用所有 OpenGL ES 2 函數,不必手動解析 OpenGL 函數指針。這啓用移動 (或嵌入式) 設備目標的跨平颱應用程序開發,並提供以更簡單 Qt API 包裹本機 OpenGL 功能的類:

最後,為更好地支持 OpenGL 較新版本 (3.0 及更高版本),版本化函數包裹器機製也可用:QOpenGLFunction_N_N 係列類暴露 OpenGL 版本和配置文件給定的所有函數,允許輕鬆開發依賴現代、僅限桌麵 OpenGL 特徵的桌麵應用程序。

更多信息,見 OpenGL 窗口範例 .

A QWindow 創建采用 QSurface::OpenGLSurface 可以用於組閤 QPainter and QOpenGLPaintDevice 通過犧牲一些視覺品質以擁有 OpenGL 硬件加速 2D 圖像。

Vulkan 集成

Qt GUI 支持 Vulkan API。Qt 應用程序要求存在 LunarG Vulkan SDK .

在 Windows,SDK 設置環境變量 VULKAN_SDK ,會被檢測到通過 configure 腳本。

在 Android,NDK 的 API Level 24 添加瞭 Vulkan 頭。

用於低級 Vulkan 支持的主要相關類包括:

此外, QVulkanWindow 提供方便子類化的 QWindow 使之更易於開始實現基於 Vulkan 的渲染目標 QWindow 。使用這種幫手類完全是可選的;取而代之,采用基於 Vulkan 的更高級渲染器的應用程序可能希望使用 QWindow 采用 QSurface::VulkanSurface 類型直接。

更多信息,見 Hello Vulkan 小部件範例 Hello Vulkan 三角形範例 .

拖放

Qt GUI 包括對拖放的支持。 拖放 概述有更多信息。