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