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, высокооптимизированным API 2D векторной графики 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.0.0 может содержать модули сторонних разработчиков под следующими разрешительными лицензиями:
Лицензия BSD 3-ого типа «Новый» или «Пересмотренный» |
|
Лицензия проекта FreeType или Лицензия GNU General Public License v2.0 только |
|
Лицензия шрифта Bitstream Vera |
|
Лицензия BSD 3-ого типа «Новый» или «Пересмотренный» |
|
Лицензия шрифта Bitstream Vera |
|
Поддержка FreeType 2 - формат Bitmap Distribution Format (BDF) |
Лицензия MIT |
Поддержка FreeType 2 - формат Portable Compiled Format (PCF) |
Лицензия MIT |
Лицензия zlib |
|
Лицензия проекта FreeType или Лицензия GNU General Public License v2.0 только |
|
Лицензия MIT |
|
Лицензия BSD 3-ого типа «Новый» или «Пересмотренный» |
|
Лицензия Independent JPEG Group |
|
Лицензия 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.0/qtgui-index.html