Qt GUI
Модуль Qt GUI предоставляет классы для интеграции с системным интерфейсом окон, обработки событий, интеграции OpenGL и OpenGL ES, 2D графики, базовой обработки изображений, шрифтов и текста. Эти классы используются внутренне технологиями пользовательского интерфейса Qt и также могут быть использованы напрямую, например, для написания приложений с использованием низкоуровневых API графики OpenGL ES.
Для разработчиков приложений, создающих пользовательские интерфейсы, Qt предоставляет более высокие API, такие как Qt Quick, которые намного более подходят, чем компоненты, представленные в модуле Qt GUI.
Использование модуля
Использование модуля Qt требует подключения к библиотеке модуля, либо напрямую, либо через другие зависимости. Несколько инструментов построения имеют специализированную поддержку для этого, включая CMake и qmake.
Компиляция с CMake
Используйте команду find_package() для поиска необходимых компонентов модуля в пакете Qt5:
find_package(Qt5 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget Qt5::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 поддерживает рисование линий, полигонов, векторных контуров, изображений и текста. Более подробная информация представлена в Системе рисования и Примере окна Raster.
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 5.10 добавила поддержку Vulkan. Для этого необходимо наличие LunarG Vulkan SDK.
В Windows SDK устанавливает переменную среды VULKAN_SDK, которая будет обнаружена скриптом configure.
В Android заголовки Vulkan были добавлены в API level 24 NDK.
Соответствующие классы:
- QVulkanDeviceFunctions
- QVulkanExtension
- QVulkanFunctions
- QVulkanInfoVector
- QVulkanInstance
- QVulkanWindow
- QVulkanWindowRenderer
Дополнительную информацию можно найти в Примере Hello Vulkan Widget и Примере Hello Vulkan Window.
Перетаскивание и сброс
Дополнительная информация в Перетаскивание и сброс
Лицензии и авторские права
Qt GUI доступен по коммерческим лицензиям от The Qt Company. Кроме того, он доступен по лицензиям свободного программного обеспечения. Начиная с Qt 5.4, эти лицензии свободного программного обеспечения — GNU Lesser General Public License, версия 3 или GNU General Public License, версия 2. Более подробная информация в Лицензировании Qt.
Кроме того, Qt GUI в Qt 5.13.0 может содержать модули сторонних разработчиков под следующими разрешительными лицензиями:
Лицензия BSD 3-пунктная «новая» или «пересмотренная» |
|
Лицензия BSD 2-пунктная «упрощенная» |
|
Общественное достояние |
|
Лицензия BSD 2-пунктная «упрощенная» |
|
Лицензия BSD 3-пунктная «новая» или «пересмотренная» |
|
Лицензия проекта FreeType или Лицензия GNU General Public License v2.0 |
|
Лицензия шрифта Bitstream Vera |
|
Лицензия BSD 3-пунктная «новая» или «пересмотренная» |
|
Лицензия шрифта Bitstream Vera |
|
Поддержка формата BDF (Bitmap Distribution Format) FreeType 2 |
Лицензия MIT |
Лицензия MIT |
|
Лицензия zlib |
|
Лицензия проекта FreeType или Лицензия GNU General Public License v2.0 |
|
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия BSD 3-пунктная «новая» или «пересмотренная» |
|
Лицензия Independent JPEG Group |
|
Лицензия libpng и Лицензия libpng 2 |
|
Лицензия Apache 2.0 |
|
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия BSD 2-пунктная «упрощенная» и лицензия Imlib2 |
|
Лицензия MIT |
|
Лицензия MIT |
|
Специальная лицензия |
|
Лицензия MIT |
|
Лицензия Международного консорциума цветов |
Справочник
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qtgui-index.html