Класс QPainter — это класс, который применяется для формирования изображений на устройствах, поддерживающих графику, таких как виджеты или карты пикселей (pixmap).
Введение
Класс QPainter способен выполнять низкоуровневое рисование в окнах и различных устройствах рисования. QPainter предлагает набор оптимизированных функций для осуществления работ, необходимых практически для всех программ, обладающих графическим пользовательским интерфейсом. Он может прорисовывать все, начиная от простой линии, до сложной фигуры, такой как, например, круговая диаграмма или хорда.
Он также способен нарисовать выровненный текст и пиксельные карты. Как правило, он прорисовывает «естественную» систему координат, но также может выполнить преобразования вида и мира. QPainter позволяет обрабатывать любые объекты, которые наследуют класс QPaintDevice. Главной функцией QPainter считается рисование, но данный класс также может предоставить некоторые функции, которые позволяют настроить параметры QPainter и его качественные параметры визуализации, а также ряд других функций, позволяющих осуществлять редактирование. Помимо этого, пользователь может осуществлять контроль объединения вместе различных форм, выбрав режим композиции художника.
Класс QPainter
Рассмотрим используемые функции, и начать следует со следующей функции:
QPainter: :isActive()
Предназначение данной функции заключается в том, чтобы указать, является ли активной программа рисования.
Совместно с классами QPaintDevice и QPaintEngine QPainter образует основу системы рисования qt. QPainter является классом, используемым для реализации операций рисования. QPaintDevice призван представить устройство, которое может быть нарисовано при помощи QPainter. QPaintEngine способен предоставить интерфейс для рисования разных типов оборудования. Если рисунок является активным, то функция device () возвращает и устройство рисования, на котором рисунок выполнен, а paintEngine () выполняет возврат механизма рисования, используемого в данный момент для рисования.
Иногда может потребоваться осуществить покраску нестандартного оборудования. QPainer обладает статической функцией для исполнения этой операции, а именно, setRedirected (). Следует отметить, что, когда paintdevice является окном, QPainter может использоваться только в функции, вызываемой paintEvent () или paintEvent ().
Пользователь может настраивать некоторые параметры согласно своим предпочтениям, чтобы QPainer их выполнил:
- Параметр font(), который устанавливает шрифт, применяемый для рисования текста. Если рисовальщик является активным, то есть, isActive (), то пользователь может применять функции fontInfo () и fontMetrics () для того чтобы получить информацию о текущем установленном шрифте и его параметрах.
- Параметр brush(), который определяет цвет или узор, применяемый для заливки формы.
- Параметр pen(), который определяет цвет или пунктир, применяемый для рисования линий или границ.
- Параметр backgroundMode(), который определяет, есть ли задний план.
- Параметр brushOrigin(), который определяет исходную точку тайловой (от английского tile, то есть, плитка) кисти, как правило, исходную точку фона виджета.
- Параметры viewport(), window(), worldTransform(), которые формируют систему преобразования координат художника.
- Параметр hasClipping(), который сообщает художнику, нужно ли осуществлять редактирование. Устройство рисования также сохраняется. Если рисовальщик будет перехвачен, он будет сохранен в clipRegion ().
- Параметр layoutDirection(), который определяет направление макета, которое используется художником при прорисовке текста.
- Параметр worldMatrixEnabled(), который определяет, разрешено ли преобразование мира.
- Параметр viewTransformEnabled(), который определяет, разрешается ли преобразование просмотров.
Следует подчеркнуть, что некоторые из этих параметров способны отражать настройки отдельных устройств рисования. Например, QWidget::Font(), QPainter::begin() являются эквивалентным конструктором QPainter, который осуществляет копирование этих атрибутов с устройства рисования.
Состояние QPainer может быть сохранено в любое время, путем вызова функции save(), которая реализует сохранение всех доступных настроек во внутреннем стеке. Функция restore () выполняет обратную операцию, то есть, восстанавливает настройки из стека.
QPainter может предоставить следующие функции для прорисовки различных примитивов:
- Функция drawPoint(), которая предназначена для рисования точки.
- Функция drawPoints(), которая предназначена для прорисовки набора точек.
- Функция drawLine(), которая служит для рисования линии.
- Функция drawRect(), которая предназначена для прорисовки прямоугольника.
- Функция drawEllipse(), которая позволяет нарисовать эллипс.
Класс QPainer также может предоставить функцию fillRect (), которая способна заполнить данный QRect необходимыми QBrush и eraseRect (), чтобы стереть область внутри этого прямоугольника. Все названные функции обладают версиями с плавающей запятой и целыми числами, хотя в рекомендациях указывается версия с плавающей запятой.
Приведем пример рисования точек при помощи функций drawPoínt и drawPoínts:
Рисунок 1. Пример рисования точек при помощи функций drawPoínt и drawPoínts. Автор24 — интернет-биржа студенческих работ
voíd Wídget::drawPoínt(QPaínter *paínter)
{
paínter->save();
paínter->drawPoínt(10, 10);
QPoínt poínt(20, 20);
painter->drawPoínt(poínt);
QPointF pointF(30, 30);
painter->drawPoint(pointF);
painter->restore();
}
И еще один пример:
Рисунок 2. Пример рисования точек при помощи функций drawPoínt и drawPoínts. Автор24 — интернет-биржа студенческих работ
void Widget::drawPoints(QPainter *painter)
{
painter->save();
QPoint point[5];
point[0].setX(10);
point[0].setY(10);
point[1].setX(20);
point[1].setY(20);
point[2].setX(30);
point[2].setY(30);
point[3].setX(40);
point[3].setY(40);
point[4].setX(50);
point[4].setY(50);
painter->drawPoints(point, 5);
Рисунок 3. Код. Автор24 — интернет-биржа студенческих работ