Qt GUI
Модуль Qt GUI предоставляет классы для интеграции с оконной системой, обработки событий, интеграции OpenGL и OpenGL ES, 2D графики, базовой обработки изображений, шрифтов и текста. Эти классы используются внутренне технологиями пользовательского интерфейса Qt, а также могут быть использованы непосредственно, например, для написания приложений с использованием низкоуровневых графических API OpenGL ES.
Для разработчиков приложений, создающих пользовательские интерфейсы, Qt предоставляет более высокие API, такие как Qt Quick, которые намного более подходят, чем средства, предоставляемые модулем Qt GUI.
Использование модуля
Использование модуля Qt требует связывания с библиотекой модуля, либо напрямую, либо через другие зависимости. Несколько инструментов сборки имеют специальную поддержку для этого, включая CMake и qmake.
Сборка с помощью CMake
Используйте команду find_package() для поиска необходимых компонентов модуля в пакете Qt6.
find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui)
См. также обзор Сборка с помощью CMake.
Сборка с помощью qmake
Если вы используете qmake для сборки своих проектов, Qt GUI включён по умолчанию. Чтобы отключить Qt GUI, добавьте следующую строку в ваш файл .pro.
QT -= gui
Окна приложения
Самые важные классы в модуле Qt GUI — QGuiApplication и QWindow. Приложение Qt, которое хочет отобразить содержимое на экране, должно использовать эти классы. QGuiApplication содержит главный цикл обработки событий, где обрабатываются и передаются все события от оконной системы и других источников. Он также обрабатывает инициализацию и завершение приложения.
Класс QWindow представляет окно в базовой оконной системе. Он предоставляет ряд виртуальных функций для обработки событий (QEvent) от оконной системы, таких как сенсорный ввод, экспозиция, фокус, нажатия клавиш и изменения геометрии.
2D графика
Модуль Qt GUI содержит классы для 2D графики, обработки изображений, шрифтов и расширенной типографики.
Окно QWindow, созданное с типом поверхности QSurface::RasterSurface, может использоваться в сочетании с QBackingStore и QPainter, высокооптимизированным 2D векторным графическим API Qt. QPainter поддерживает рисование линий, многоугольников, векторных контуров, изображений и текста. Дополнительная информация доступна в разделах Система рисования и Пример окна растрового отображения.
Qt может загружать и сохранять изображения с помощью классов QImage и QPixmap. По умолчанию Qt поддерживает наиболее распространённые форматы изображений, включая JPEG и PNG, среди других. Пользователи могут добавить поддержку дополнительных форматов через класс QImageIOPlugin. Дополнительная информация доступна в разделе Чтение и запись файлов изображений.
Типографика в Qt выполняется с помощью QTextDocument, который использует API QPainter в сочетании с классами шрифтов Qt, в первую очередь QFont. Приложения, предпочитающие более низкоуровневые API для обработки текста и шрифтов, могут использовать классы, такие как QRawFont и QGlyphRun.
Интеграция 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 ES 2 в настольном OpenGL без ручного разрешения указателей функций OpenGL, что позволяет создавать кроссплатформенные приложения, ориентированные на мобильные или встраиваемые устройства, а также некоторые классы, которые оборачивают нативную функциональность OpenGL в более простой API Qt:
- QOpenGLBuffer
- QOpenGLFramebufferObject
- QOpenGLShaderProgram
- QOpenGLTexture
- QOpenGLDebugLogger
- QOpenGLTimerQuery
- QOpenGLVertexArrayObject
Наконец, для лучшей поддержки новых версий (3.0 и выше) OpenGL также доступен механизм функций с версиями: семейство классов QOpenGLFunction_N_N предоставляет все функции в заданной версии и профиле OpenGL, позволяя легко разрабатывать настольные приложения, опирающиеся на современные, только настольные функции OpenGL.
Дополнительную информацию можно найти в Примере окна OpenGL.
Модуль Qt GUI также содержит несколько математических классов для помощи в наиболее распространённых математических операциях, связанных с 3D графикой. Эти классы включают QMatrix4x4, QVector4D и QQuaternion.
Окно QWindow, созданное с QSurface::OpenGLSurface, может использоваться в сочетании с QPainter и QOpenGLPaintDevice, чтобы иметь OpenGL-ускоренную 2D графику, в ущерб части качества изображения.
Интеграция Vulkan
Qt GUI поддерживает API Vulkan. Приложения Qt требуют наличия LunarG Vulkan SDK.
В Windows SDK устанавливает переменную среды VULKAN_SDK, которая будет обнаружена скриптом configure.
В Android заголовки Vulkan были добавлены в API-уровне 24 NDK.
Соответствующие классы:
- QVulkanDeviceFunctions
- QVulkanExtension
- QVulkanFunctions
- QVulkanInfoVector
- QVulkanInstance
- QVulkanWindow
- QVulkanWindowRenderer
Дополнительную информацию можно найти в Примере виджета Hello Vulkan и Примере окна Hello Vulkan.
Перетаскивание
Qt GUI включает поддержку перетаскивания. Дополнительная информация доступна в обзоре Перетаскивание.
Эволюция модуля
Изменения в Qt GUI перечисляет важные изменения в API и функциональности модуля, внесённые в серии Qt 6.
Лицензии и авторские права
Qt GUI доступен по коммерческим лицензиям от The Qt Company. Кроме того, он доступен по лицензиям свободного программного обеспечения: GNU Lesser General Public License, версия 3 или GNU General Public License, версия 2. Более подробная информация представлена в Qt Licensing.
Кроме того, Qt GUI в Qt 6.2.2 может содержать модули сторонних разработчиков под следующими либеральными лицензиями:
Лицензия BSD 3-пунктная «Новая» или «Пересмотренная» |
|
Лицензия проекта FreeType или Общественная лицензия GNU v2.0 |
|
Лицензия шрифта Bitstream Vera |
|
Лицензия BSD 3-пунктная «Новая» или «Пересмотренная» |
|
Лицензия шрифта Bitstream Vera |
|
Поддержка FreeType 2 — формат BDF (Bitmap Distribution Format) |
Лицензия MIT |
Поддержка FreeType 2 — формат PCF (Portable Compiled Format) |
Лицензия MIT |
Лицензия zlib |
|
Лицензия проекта FreeType или Общественная лицензия GNU v2.0 |
|
Лицензия MIT |
|
Лицензия BSD 3-пунктная «Новая» или «Пересмотренная» |
|
Лицензия Independent JPEG Group, лицензия BSD 3-пунктная «Новая» или «Пересмотренная» и лицензия zlib |
|
Лицензия libpng и Справочная библиотека PNG версии 2 |
|
Лицензия MIT |
|
Лицензия Apache 2.0 |
|
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия BSD 2-пунктная «Упрощенная» и лицензия Imlib2 |
|
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия LCS-Telegraphics |
|
Лицензия X11, историческое уведомление об разрешении и отказ |
|
Лицензия MIT |
|
Лицензия Международного консорциума по цвету |
Справочник
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qtgui-index.html