Рисование и заливка
Рисование
QPainter предоставляет высокооптимизированные функции для выполнения большинства операций рисования, необходимых для графических приложений. Он может рисовать всё, от простых графических примитивов (представленных классами QPoint, QLine, QRect, QRegion и QPolygon) до сложных фигур, таких как векторные пути. В Qt векторные пути представлены классом QPainterPath. QPainterPath предоставляет контейнер для операций рисования, позволяя создавать и повторно использовать графические фигуры.
|
QPainterPath Путь рисования — это объект, составленный из линий и кривых. Например, прямоугольник состоит из линий, а эллипс — из кривых. Основное преимущество путей рисования перед обычными операциями рисования заключается в том, что сложные фигуры нужно создавать только один раз; затем их можно рисовать многократно, используя только вызовы функции QPainter::drawPath() Объект QPainterPath можно использовать для заливки, контура и обрезки. Для генерации заполняемых контуров для данного пути рисования используйте класс QPainterPathStroker. |
Линии и контуры рисуются с помощью класса QPen. Ручка определяется её стилем (т. е. типом линии), шириной, кистью, способом рисования конечных точек (стиль наконечника) и способом рисования соединений между двумя соединёнными линиями (стиль соединения). Кисть ручки — это объект QBrush, используемый для заполнения штрихов, созданных ручкой, то есть класс QBrush определяет узор заливки.
QPainter также может рисовать выровненный текст и пиксы.
При рисовании текста шрифт задаётся с помощью класса QFont. Qt будет использовать шрифт с указанными атрибутами, или, если соответствующий шрифт не существует, Qt будет использовать наиболее подходящий установленный шрифт. Атрибуты фактически используемого шрифта можно получить с помощью класса QFontInfo. Кроме того, класс QFontMetrics предоставляет измерения шрифта, а класс QFontDatabase предоставляет информацию о доступных шрифтах в базовой системе окон.
Обычно QPainter рисует в «естественной» системе координат, но он может выполнять преобразования вида и мира с помощью класса QTransform. Дополнительную информацию см. в разделе Система координат, в котором также описывается процесс рендеринга, т. е. соотношение между логическим представлением и рендеренными пикселями, и преимущества антиалиасинга при рисовании.
|
Антиалиасинговое рисование При рисовании рендеринг пикселей контролируется рендеринговым указанием QPainter::Antialiasing. Перечисление QPainter::RenderHint используется для указания флагов для QPainter, которые могут или не могут быть учтены любым движком. Значение QPainter::Antialiasing указывает, что движок должен выполнять антиалиасинг краёв примитивов, если это возможно, т. е. сглаживать края путём использования различных интенсивностей цвета. |
Заливка
Фигуры заливаются с помощью класса QBrush. Кисть определяется своим цветом и стилем (т. е. узором заливки).
Любой цвет в Qt представлен классом QColor, который поддерживает цветовые модели RGB, HSV и CMYK. QColor также поддерживает альфа-смешанный контур и заливку (указание эффекта прозрачности), и класс не зависит от платформы и устройства (цвета отображаются на оборудовании с помощью класса QColormap). Более подробную информацию см. в документации к классу QColor.
Доступные узоры заливки описаны в перечислении Qt::BrushStyle. Они включают базовые узоры, начиная от однородного цвета до очень разреженного узора, различные комбинации линий, градиентную заливку и текстуры. Qt предоставляет класс QGradient для определения пользовательских градиентных заливок, а текстурные узоры задаются с помощью класса QPixmap.
|
QGradient Класс QGradient используется в сочетании с QBrush для указания градиентной заливки. В настоящее время Qt поддерживает три типа градиентной заливки: линейные градиенты интерполируют цвета между начальной и конечной точками, радиальные градиенты интерполируют цвета между фокусной точкой и конечными точками на окружности вокруг неё, а конические градиенты интерполируют цвета вокруг центральной точки. |
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/paintsystem-drawing.html