Устройства и бэкэнды рисования
Создание устройства рисования
Класс QPaintDevice — это базовый класс объектов, на которые можно рисовать, т. е. QPainter может рисовать на любом подклассе QPaintDevice. Функционал рисования QPaintDevice реализуют, среди прочего, классы QWidget, QImage, QPixmap, QPicture, QPrinter и QOpenGLPaintDevice.
| Прикладной виджет Класс QWidget — это базовый класс элементов пользовательского интерфейса в модуле Qt Widgets. Он получает события мыши, клавиатуры и другие события от системы окон и отрисовывает представление самого себя на экране. |
| Изображение Класс QImage предоставляет независимую от аппаратной части систему представления изображений, оптимизированную для ввода-вывода и прямого доступа к пикселям и их изменения. QImage поддерживает несколько форматов изображений, включая монохромные, 8-битные, 32-битные и изображения с альфа-каналом. Одним из преимуществ использования QImage в качестве устройства рисования является возможность гарантировать точность пикселей любого рисунка независимо от платформы. Другое преимущество — рисование может выполняться в другом потоке, отличном от текущего потока GUI. |
| Растровое изображение Класс QPixmap представляет собой изображение вне экрана, разработанное и оптимизированное для отображения изображений на экране. В отличие от QImage, данные пикселей в pixmap внутренние и управляются подлежащей системой окон, т. е. к пикселям можно обращаться только через функции QPainter или путем преобразования QPixmap в QImage. Для оптимизации рисования с QPixmap Qt предоставляет класс QPixmapCache, который может использоваться для хранения временных pixmap, которые сложно сгенерировать, не используя больше места хранения, чем лимит кеша. Qt также предоставляет удобный класс QBitmap, унаследованный от QPixmap. QBitmap гарантирует монохромные (1-битный глубина) pixmap и в основном используется для создания пользовательских объектов QCursor и QBrush, построения объектов QRegion. |
| Устройство рисования OpenGL Как уже упоминалось, Qt предлагает классы, которые упрощают использование OpenGL в приложениях Qt. Например, QOpenGLPaintDevice позволяет использовать API OpenGL для рендеринга с помощью QPainter. |
| Рисунок Класс QPicture — это устройство рисования, которое записывает и воспроизводит команды QPainter. Рисунок сериализует команды рисования в устройство ввода-вывода в формате, независимом от платформы. QPicture также независим от разрешения, т. е. QPicture может отображаться на разных устройствах (например, svg, pdf, ps, принтер и экран), сохраняя свой внешний вид. Qt предоставляет функции QPicture::load() и QPicture::save(), а также операторы потокового ввода/вывода для загрузки и сохранения рисунков. |
| Пользовательские бэкэнды Поддержка нового бэкэнда может быть реализована путем наследования от класса QPaintDevice и переопределения виртуальной функции QPaintDevice::paintEngine(), чтобы указать QPainter, какой механизм рисования следует использовать для рисования на этом конкретном устройстве. Для фактической возможности рисования на устройстве этот механизм рисования должен быть пользовательским механизмом рисования, созданным путем наследования от класса QPaintEngine. |
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/paintsystem-devices.html