Система рисования
|
QPainterPath Траектория рисовальщика - объект, состоящий из линий и кривых. Например, прямоугольник состоит из линий, а эллипс состоит из кривых. Основное преимущество траекторий рисовальщика над обычными операциями рисования заключается в том, что достаточно создать сложные фигуры один раз; затем их можно рисовать не один раз вызывая только функцию QPainter::drawPath(). Объект QPainterPath можно использовать для заполнения, рисования контура и обрезки. Чтобы создать заливаемые контуры для заданной траектории рисовальщика используется класс QPainterPathStroker. |
Линии и контуры рисуются используя класс QPen. Перо определяется своим стилем (т.е. своим типом линии, line-type), шириной, кистью, способом рисования точек окончания (стилем окончаний, cap-style) и как рисуется место соединения двух соединенных линий (стиль объединения, join-style). Кистью пера является объект QBrush, используемый для заполнения штрихов, создаваемых пером, т.е. класс QBrush определяет узор-заполнитель (fill pattern).
QPainter также может рисовать выровненный текст и растровые изображения.
При отрисовке текста шрифт задается используя класс QFont. Qt будет использовать шрифт с заданными атрибутами или, если нет соответствующего шрифта, то Qt будет использовать наиболее похожий установленный шрифт. Атрибуты шрифта, которые действительно используются, можно получить используя класс QFontInfo. Кроме того, класс QFontMetrics предоставляет размеры шрифта, а класс QFontDatabase предоставляет информацию о шрифтах, доступных в основной оконной системе.
Обычно QPainter рисует в "естественной" системе координат, но может выполнять преобразование вида и мировое преобразование, используя класс QMatrix. Для получения дополнительной информации смотрите документацию Система координат, которая также описывает процесс визуализации, т.е. соотношение между логическим представлением и визуализируемыми пикселями, а также преимущества сглаженного рисования.
Сглаженное рисование Когда идет рисование, визуализация пикселя контролируется подсказкой визуализации (render hint) QPainter::Antialiasing. Перечисление QPainter::RenderHint используется для указания флагов QPainter'у, которые могут или не могут быть соблюдены любым заданным механизмом. Значение QPainter::Antialiasing указывает на то, что механизм должен сгладить края примитивов если это возможно, т.е. сгладить края используя разную интенсивность цвета. |
Фигуры заполняются с использованием класса QBrush. Кисть определяется своим цветом и стилем (т.е. своим узором-заполнителем).
Все цвета в Qt представляются классом QColor, который поддерживает цветовые модели RGB, HSV и CMYK. QColor также поддерживает альфа-смешивание контуров и внутренних областей (задавая эффект прозрачности), а класс является независимым от платформы и устройства (цвета отображаются на аппаратное обеспечение с использованием класса QColormap). Для получения дополнительной информации смотрите документацию класса QColor.
При создании нового виджета рекомендуется использовать цвета палитры виджета вместо жестко запрограммированных конкретных цветов. Все виджеты в Qt содержат палитру и используют свою палитру для отрисовки самих себя. Палитра виджета представляется классом QPalette, который содержит группы цветов для каждого состояния виджета.
Доступные узоры-заполнители описываются перечислением Qt::BrushStyle. Оно включает базовые шаблоны, простирающиеся от равномерного цвета до очень разреженного шаблона, различные комбинации линий, градиентные заливки и текстуры. Qt предоставляет класс QGradient для определения пользовательских градиентных заливок, в то время как текстурные шаблоны задаются используя класс QPixmap.
QGradient Класс QGradient используется в сочетании с QBrush для задания градиентных заливок. В настоящее время Qt поддерживает три типа градиентных заливок: Линейные градиенты интерполируют цвета от начальной до конечной точки, радиальные градиенты интерполируют цвета между фокусом и точками на окружности вокруг нее, а конические градиенты интерполируют цвета вокруг центральной точки. |
Класс QPaintDevice является базовым для объектов, на которых можно рисовать, т.е. QPainter может рисовать на любых подклассах QPaintDevice. Возможности рисования на QPaintDevice'е в настоящее время реализованы подклассами QWidget, QImage, QPixmap, QGLWidget, QGLPixelBuffer, QPicture и QPrinter.
Пользовательские серверные части (Backends) Поддержка новой серверной части может быть реализована производным классом от QPaintDevice и переопределенной виртуальной функции QPaintDevice::paintEngine(), сообщающей QPainter'у каким механизмом рисования воспользоваться для рисования на данном конкретном устройстве. Чтобы на самом деле быть способным рисовать на устройстве, этот механизм рисования должен быть пользовательским механизмом рисования, созданным наследованием от класса QPaintEngine. |
Класс QWidget является базовым классом для всех объектов пользовательского интерфейса. Виджет - это элементарный объект пользовательского интерфейса: он получает события мыши, клавиатуры и другие события от оконной системы и рисует свое изображение на экране.
Класс QImage предоставляет аппаратно-независимое представление изображения, которое спроектировано и оптимизировано для ввода/вывода и для непосредственного доступа к пикселям и манипуляций с ними. QImage поддерживает несколько форматов изображений, включая монохромное, 8-битное, 32-битное и изображения с альфа-смешиванием.
Одним из преимуществ использования QImage в качестве устройства рисования является возможность гарантировать пиксельную точность любой операции рисования независимым от платформы способом. Другим преимуществом является то, что рисование может выполняться в другом потоке, а не в текущем потоке ГПИ.
Класс QPixmap является внеэкранным представлением изображения, которое спроектировано и оптимизировано для показа изображений на экране. В отличие от QImage, данные о пикселах в растровом изображении являются внутренними и управляются основной оконной системой, т.е. доступ к пикселям может быть осуществлен только через функции QPainter'а или после преобразования QPixmap в QImage.
Чтобы оптимизировать рисование с помощью QPixmap, Qt предоставляет класс QPixmapCache, который можно использовать для сохранения временных растровых изображений, которые дорого генерировать без использования области памяти, превышающей предельный размер кэша.
Qt также предоставляет вспомогательный класс QBitmap, унаследованный от QPixmap. QBitmap обеспечивает монохромные (глубиной в 1 бит) растровые изображения и используется главным образом для создания пользовательских объектов QCursor и QBrush, создания объектов QRegion, а также для установки масок для растровых изображений и виджетов.
Как было сказано выше, Qt предоставляет модуль QtOpenGL, предлагающий классы, которые упрощают использование OpenGL в приложениях Qt. Например, QGLWidget разрешает OpenGL API для визуализации.
Однако QGLWidget также является подклассом QWidget и может быть использован QPainter'ом как любое другое устройство рисования. Одним из преимуществ является то, что это позволяет Qt использовать высокую производительность OpenGL для большинства операций рисования, таких как преобразования и рисование растровых изображений.
Модуль QtOpenGL также предоставляет класс QGLPixelBuffer, который является прямым наследником QPaintDevice.
QGLPixelBuffer инкапсулирует пиксельный буфер OpenGL, pbuffer. Визуализация в pbuffer обычно производится с использованием полного аппаратного ускорения, что может быть значительно быстрее чем визуализация в QPixmap.
Модуль QtOpenGL также предоставляет класс QGLFramebufferObject, который является прямым наследником QPaintDevice.
QGLFramebufferObject инкапсулирует объект буфера кадров OpenGL. Объекты буфера кадров можно также использовать для внеэкранной визуализации, и дает некоторые преимущества перед использованием пиксельных буферов для этой цели. Они описаны в документации класса QGLFramebufferObject.
Класс QPicture - устройство рисования, которое записывает и воспроизводит команды QPainter'а. Изображение преобразовывает команды рисовальщика для устройства ввода-вывода в последовательную форму в платформонезависимом формате. QPicture также не зависит от разрешающей способности, т.е. QPicture может отображаться на разных устройствах (например, svg, pdf, ps, принтере и экране), имея при этом один и тот же внешний вид.
Qt предоставляет функции QPicture::load() и QPicture::save() для загрузки и сохранения изображений. Но кроме того класс QPictureIO предоставляется чтобы дать возможность программисту устанавливать новые форматы изображений помимо тех, что предоставляет Qt.
Класс QPrinter - устройство рисования, которое рисует на принтер. В Windows или Mac OS X QPrinter использует встроенные драйвера принтера. В X11 QPrinter генерирует postscript и отправляет его в lpr, lp или другую программу печати. QPrinter может также печатать на любой другой объект QPrintEngine.
Класс QPrintEngine определяет интерфейс, через который QPrinter взаимодействует с имеющейся подсистемой печати. В общем случае, когда создается собственный механизм печати, он наследуется и от QPaintEngine и от QPrintEngine.
Формат вывода по умолчанию зависит от платформы, на которой работает принтер, но явно настроив формат вывода для QPrinter::PdfFormat, QPrinter будет генерировать свой вывод в виде PDF-файла.
Наиболее распространенный способ чтения изображений - посредством конструкторов QImage и QPixmap, или вызова функций QImage::load() и QPixmap::load(). Кроме того, Qt предоставляет класс QImageReader, который дает больший контроль за процессом. В зависимости от базовой поддержки в формате изображения, функции предоставляемые классом могут сохранять память и ускорить загрузку изображений.
Также Qt предоставляет класс QImageWriter, который поддерживает установку опций, специфичных для формата, например, гамма-уровень, уровень сжатия и качество, перед сохранением изображения. Если вам не нужны такие опции, используйте взамен QImage::save() или QPixmap::save().
QMovie QMovie - вспомогательный класс для отображения анимации, использующий класс QImageReader для внутренних нужд. После того, как класс QMovie создан, он предоставляет различные функции и для запуска, и для управления имеющейся анимацией. |
Классы QImageReader и QImageWriter зависят от класса QImageIOHandler, который является общим интерфейсом ввода/вывода изображения для всех форматов изображений в Qt. Объекты QImageIOHandler используются для внутренних нужд в QImageReader и QImageWriter для добавления в Qt поддержки различных форматов изображения.
Список поддерживаемых форматов файлов доступен посредством функций QImageReader::supportedImageFormats() и QImageWriter::supportedImageFormats(). Qt поддерживает несколько форматов файлов по умолчанию, а кроме того новые форматы могут быть добавлены в качестве подключаемых модулей. Поддерживаемые в настоящее время форматы перечислены в документации классов QImageReader и QImageWriter.
Механизм подключаемых модулей Qt может также использоваться для написания обработчиков пользовательских форматов изображения. Это делается наследованием от класса QImageIOHandler и созданием объекта QImageIOPlugin, который является фабрикой для создания объектов QImageIOHandler. Когда подключаемый модуль установлен, QImageReader и QImageWriter автоматически загрузят его и начнут его использовать.
Визуализация SVG Масштабируемая векторная графика (Scalable Vector Graphics, SVG) - язык описания как статической, так и анимированной двухмерной векторной графики. Qt включает поддержку статических возможностей SVG 1.2 Tiny. Рисунки SVG могут быть визуализированы на любом подклассе QPaintDevice. Такой подход дает разработчикам гибкость и возможность экспериментировать и находить наилучшее решение для конкретной ситуации. Самый легкий способ отображения файлов SVG - это создание QSvgWidget и загрузка в него файла SVG с помощью одной из функций QSvgWidget::load(). Визуализация выполняется классом QSvgRenderer, который также может быть использован непосредственно для предоставления поддержки SVG для пользовательских виджетов. Для получения дополнительной информации смотрите документацию модуля QtSvg. |
Встроенные виджеты Qt используют класс QStyle для выполнения почти всех своих операций рисования. QStyle - абстрактный базовый класс, который инкапсулирует внешний вид и поведение ГПИ, и может использоваться чтобы заставить виджеты выглядеть точно также как "родные" эквивалентные виджеты или чтобы придать виджетам пользовательский внешний вид.
Qt предоставляет набор подклассов QStyle , которые эмулируют внешний вид, присущий различным платформам, поддерживаемых Qt (QWindowsStyle, QMacStyle, QMotifStyle и т.д.). Эти стили встроены в библиотеку QtGui, остальные же стили можно сделать доступными используя механизм подключаемых модулей Qt.
Большинство функций для отрисовки элементов стиля получают четыре аргумента:
Стиль получает всю информацию, необходимую для визуализации графического элемента, из класса QStyleOption. Виджет передается в последнем аргументе в том случае, если стиль нуждается в нем для создания специальных эффектов (таких как анимированные кнопки по умолчанию в Mac OS X), но это не обязательно. Фактически, QStyle может использоваться для рисования на любом устройстве рисования (не только виджетах), в этом случае аргумент виджета равен нулевому указателю (zero pointer).
Система рисования также предоставляет класс QStylePainter, унаследованный от QPainter. QStylePainter - вспомогательный класс для отрисовки элементов QStyle внутри виджета, а также расширяет QPainter с помощью набора высокоуровневых функций рисования, реализованных поверх API QStyle'а. Преимущество от использования QStylePainter заключается в том, что списки получаемых параметров значительно короче.
![]() | QIcon Класс QIcon предоставляет масштабируемые пиктограммы в различных режимах и состояниях. QIcon может сформировать растровые изображения, отражающие состояние пиктограммы, режим и размер. Эти растровые изображения формируются из набора растровых изображений, которые делаются доступными для пиктограммы, и используются виджетами Qt для показа пиктограммы, представляющей отдельное действие. Визуализация объекта QIcon обрабатывается классом QIconEngine. Каждая пиктограмма имеет механизм пиктограмм, который отвечает за отрисовку пиктограммы с требуемым размером, режимом и состоянием. |
Copyright © 2008 Nokia | Торговые марки | Qt 4.4.3 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |