[Система рисования] [Следующая: Отрисовка и заливка] Устройства рисования и серверные части (backends)
|
Виджет Класс QWidget является базовым классом для всех объектов пользовательского интерфейса. Виджет - это элементарный объект пользовательского интерфейса: он получает события мыши, клавиатуры и другие события от оконной системы и рисует свое изображение на экране. |
Изображение Класс QImage предоставляет аппаратно-независимое представление изображения, которое спроектировано и оптимизировано для ввода/вывода и для непосредственного доступа к пикселям и манипуляций с ними. QImage поддерживает несколько форматов изображений, включая монохромное, 8-битное, 32-битное и изображения с альфа-смешиванием. Одним из преимуществ использования QImage в качестве устройства рисования является возможность гарантировать пиксельную точность любой операции рисования независимым от платформы способом. Другим преимуществом является то, что рисование может выполняться в другом потоке, а не в текущем потоке ГПИ. |
Растровое изображение Класс QPixmap является внеэкранным представлением изображения, которое спроектировано и оптимизировано для показа изображений на экране. В отличие от QImage, данные о пикселах в растровом изображении являются внутренними и управляются основной оконной системой, т.е. доступ к пикселям может быть осуществлен только через функции QPainter'а или после преобразования QPixmap в QImage. Чтобы оптимизировать рисование с помощью QPixmap, Qt предоставляет класс QPixmapCache, который можно использовать для сохранения временных растровых изображений, которые дорого генерировать без использования области памяти, превышающей предельный размер кэша. Qt также предоставляет вспомогательный класс QBitmap, унаследованный от QPixmap. QBitmap обеспечивает монохромные (глубиной в 1 бит) растровые изображения и используется главным образом для создания пользовательских объектов QCursor и QBrush, создания объектов QRegion, а также для установки масок для растровых изображений и виджетов. |
Виджет OpenGL Как было сказано выше, Qt предоставляет модуль QtOpenGL, предлагающий классы, которые упрощают использование OpenGL в приложениях Qt. Например, QGLWidget разрешает OpenGL API для визуализации. Однако QGLWidget также является подклассом QWidget и может быть использован QPainter'ом как любое другое устройство рисования. Одним из преимуществ является то, что это позволяет Qt использовать высокую производительность OpenGL для большинства операций рисования, таких как преобразования и рисование растровых изображений. |
Пиксельный буфер Модуль QtOpenGL также предоставляет класс QGLPixelBuffer, который является прямым наследником QPaintDevice. QGLPixelBuffer инкапсулирует пиксельный буфер OpenGL, pbuffer. Визуализация в pbuffer обычно производится с использованием полного аппаратного ускорения, что может быть значительно быстрее чем визуализация в QPixmap. |
Framebuffer Object Модуль QtOpenGL также предоставляет класс QGLFramebufferObject, который является прямым наследником QPaintDevice. QGLFramebufferObject инкапсулирует объект буфера кадров OpenGL. Объекты буфера кадров можно также использовать для внеэкранной визуализации, и дает некоторые преимущества перед использованием пиксельных буферов для этой цели. Они описаны в документации класса QGLFramebufferObject. |
Изображение Класс QPicture - устройство рисования, которое записывает и воспроизводит команды QPainter'а. Изображение преобразовывает команды рисовальщика для устройства ввода-вывода в последовательную форму в платформонезависимом формате. QPicture также не зависит от разрешающей способности, т.е. QPicture может отображаться на разных устройствах (например, svg, pdf, ps, принтере и экране), имея при этом один и тот же внешний вид. Для загрузки и сохранения изображений Qt предоставляет функции QPicture::load() и QPicture::save(), а также потоковые операторы. |
Принтер Класс QPrinter - устройство рисования, которое рисует на принтер. В Windows или Mac OS X QPrinter использует встроенные драйвера принтера. В X11 QPrinter генерирует postscript и отправляет его в lpr, lp или другую программу печати. QPrinter может также печатать на любой другой объект QPrintEngine. Класс QPrintEngine определяет интерфейс, через который QPrinter взаимодействует с имеющейся подсистемой печати. В общем случае, когда создается собственный механизм печати, он наследуется и от QPaintEngine и от QPrintEngine. Формат вывода по умолчанию зависит от платформы, на которой работает принтер, но явно настроив формат вывода для QPrinter::PdfFormat, QPrinter будет генерировать свой вывод в виде PDF-файла. |
Пользовательские серверные части (Backends) Поддержка новой серверной части может быть реализована производным классом от QPaintDevice и переопределенной виртуальной функции QPaintDevice::paintEngine(), сообщающей QPainter'у каким механизмом рисования воспользоваться для рисования на данном конкретном устройстве. Чтобы на самом деле быть способным рисовать на устройстве, этот механизм рисования должен быть пользовательским механизмом рисования, созданным наследованием от класса QPaintEngine. |
Начиная с Qt 4.5, можно заменить механизмы рисования и устройства рисования используемые для виджетов, растровых изображений и внеэкранный двойной буфер. Бэкенды по умолчанию:
Windows | Программный растризатор (Rasterizer) |
X11 | X11 |
Mac OS X | CoreGraphics |
Embedded | Программный растризатор (Rasterizer) |
Передача параметра командной строки в приложение, например, -graphicssystem raster, указывает, что Qt должна использовать программный растризатор для этого приложения. Программный растризатор полностью поддерживается на всех платформах.
> analogclock -graphicssystem raster
Также имеется режим -graphicssystem opengl, который использует для всей отрисовки OpenGL. В настоящее время, этот механизм является экспериментальным так как он не всё отрисовывает правильно.
Qt также поддерживает конфигурирование с использованием -graphicssystem raster|opengl, в этом случае все приложения будут использовать указанную графическую систему для своей графики.
[Система рисования] [Следующая: Отрисовка и заливка]
Авторские права © 2010 Nokia Corporation и/или её дочерние компании | Торговые марки | Qt 4.6.4 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |