Qt GUI
Модуль Qt GUI предоставляет классы для интеграции с оконной системой, обработки событий, интеграции OpenGL и OpenGL ES, 2D-графики, базовой обработки изображений, шрифтов и текста. Эти классы используются внутренне технологиями пользовательского интерфейса Qt и также могут использоваться напрямую, например, для написания приложений, использующих низкоуровневые графические API OpenGL ES.
Для разработчиков приложений, создающих пользовательские интерфейсы, Qt предоставляет более высокоуровневые API, такие как Qt Quick, которые намного более подходящие, чем средства, предоставляемые модулем Qt GUI.
Начало работы
Для включения определений классов модуля используйте следующую директиву:
#include <QtGui>
Если вы используете 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 поддерживает рисование линий, многоугольников, векторных путей, изображений и текста. Дополнительную информацию см. в разделе Система рисования и Пример окна 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 для ускоренной 2D-графики с помощью OpenGL, пожертвовав при этом некоторой частью качества изображения.
Интеграция Vulkan
Qt 5.10 добавила поддержку Vulkan. Это требует наличия LunarG Vulkan SDK.
В Windows SDK устанавливает переменную среды VULKAN_SDK, которая будет обнаружена скриптом configure.
В Android заголовки Vulkan были добавлены в API уровня 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.11.2 может содержать модули сторонних разработчиков по следующим лицензиям с открытым исходным кодом:
Лицензия BSD 3-х пунктов («Новая» или «Пересмотренная») |
|
Лицензия BSD 2-х пунктов («Упрощенная») |
|
Публичная область |
|
Лицензия BSD 2-х пунктов («Упрощенная») |
|
Лицензия BSD 3-х пунктов («Новая» или «Пересмотренная») |
|
Лицензия проекта FreeType или только лицензия GNU General Public License v2.0 |
|
Лицензия BSD 3-х пунктов («Новая» или «Пересмотренная») |
|
Лицензия проекта FreeType или только лицензия GNU General Public License v2.0 |
|
Freetype 2 — поддержка формата BDF (Bitmap Distribution Format) |
Лицензия MIT |
Freetype 2 — поддержка формата PCF (Portable Compiled Format) |
Лицензия MIT |
Лицензия zlib |
|
Лицензия MIT |
|
Лицензия MIT |
|
Лицензия BSD 3-х пунктов («Новая» или «Пересмотренная») |
|
Лицензия Independent JPEG Group |
|
Лицензия libpng |
|
Лицензия 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/archives/qt-5.11/qtgui-index.html