Spec-Zone.ru › Qt 5.12

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, высокооптимизированным 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, для получения 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 и Примере окна Hello Vulkan.

Перетаскивание

Дополнительная информация в Перетаскивание

Лицензии и авторские права

Qt GUI доступен по коммерческим лицензиям от The Qt Company. Кроме того, он доступен по лицензиям свободного программного обеспечения. С Qt 5.4 эти лицензии свободного программного обеспечения являются GNU Lesser General Public License, version 3 или GNU General Public License, version 2. Дополнительные подробности см. в Qt Licensing.

Кроме того, Qt GUI в Qt 5.12.4 может содержать модули сторонних разработчиков по следующим разрешительным лицензиям:

Библиотека ANGLE, версия chromium/3280

Лицензия BSD 3-пунктная («новая» или «пересмотренная»)

ANGLE: Ограничитель границ массива для WebKit

Лицензия BSD 2-пунктная («упрощенная»)

ANGLE: Murmurhash

Общественное достояние

ANGLE: Systeminfo

Лицензия BSD 2-пунктная («упрощенная»)

ANGLE: trace_event

Лицензия BSD 3-пунктная («новая» или «пересмотренная»)

Растеризатор с антиалиасингом из FreeType 2

Лицензия проекта FreeType или только Общественная лицензия GNU v2.0

Шрифт Bitstream Vera, версия 1.10

Лицензия шрифта Bitstream Vera

Плагин платформы Cocoa

Лицензия BSD 3-пунктная («новая» или «пересмотренная»)

Шрифты DejaVu, версия 2.37

Лицензия шрифта Bitstream Vera

Поддержка FreeType 2 - формат BDF (Bitmap Distribution Format)

Лицензия MIT

Поддержка FreeType 2 - формат PCF (Portable Compiled Format)

Лицензия MIT

Freetype 2 - zlib

Лицензия zlib

Freetype 2, версия 2.9.1

Лицензия проекта FreeType или только Общественная лицензия GNU v2.0

HarfBuzz

Лицензия MIT

HarfBuzz-NG, версия 1.7.4

Лицензия MIT

Спецификация IDL IAccessible2, версия 1.3.0

Лицензия BSD 3-пунктная («новая» или «пересмотренная»)

LibJPEG-turbo, версия 2.0.0

Лицензия Independent JPEG Group

LibPNG, версия 1.6.37

Лицензия libpng и лицензия libpng 2

Стиль по умолчанию для Android

Лицензия Apache 2.0

Заголовки OpenGL ES 2, версия Ревизия 27673

Лицензия MIT

Заголовки OpenGL, версия Ревизия 27684

Лицензия MIT

Pixman, версия 0.17.12

Лицензия MIT

Алгоритм плавного масштабирования

Лицензия BSD 2-пунктная («упрощенная») и лицензия Imlib2

Регистр API Vulkan, версия 1.0.39

Лицензия MIT

WebGradients

Лицензия MIT

API Wintab

Пользовательская лицензия

XCB

Лицензия MIT

Профиль цвета sRGB icc

Лицензия Международного консорциума по цвету

Справочник

  • Классы Qt GUI на C++
    • Классы событий
    • Классы рисования
    • Рендеринг в 3D

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qtgui-index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API