Spec-Zone.ru › Qt 5.13

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 может содержать модули сторонних разработчиков под следующими разрешительными лицензиями:

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

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

ANGLE: Класс обработки границ массива для WebKit

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

ANGLE: Murmurhash

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

ANGLE: Система информации

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

ANGLE: trace_event

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

Антиалиасинг растрирования из FreeType 2

Лицензия проекта FreeType или Лицензия GNU General Public License v2.0

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

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

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

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

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

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

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

Лицензия MIT

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

Лицензия MIT

Freetype 2 - zlib

Лицензия zlib

Freetype 2, версия 2.9.1

Лицензия проекта FreeType или Лицензия GNU General Public License v2.0

HarfBuzz

Лицензия MIT

HarfBuzz-NG, версия 1.7.4

Лицензия MIT

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

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

LibJPEG-turbo, версия 2.0.2

Лицензия 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.13/qtgui-index.html

Spec-Zone.ru

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