Spec-Zone.ru › Qt 6.0

Класс QPainter

Класс QPainter выполняет низкоуровневую отрисовку на виджетах и других устройствах отрисовки. Подробнее...

Заголовок: #include <QPainter>
CMake: find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Наследуется от:

QStylePainter

  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются перевходными.

Типы Public

класс PixmapFragment
перечисление CompositionMode { CompositionMode_SourceOver, CompositionMode_DestinationOver, CompositionMode_Clear, CompositionMode_Source, CompositionMode_Destination, …, RasterOp_SourceOrNotDestination }
перечисление PixmapFragmentHint { OpaqueHint }
флаги PixmapFragmentHints
перечисление RenderHint { Antialiasing, TextAntialiasing, SmoothPixmapTransform, LosslessImageRendering }
флаги RenderHints

Public Функции

QPainter(QPaintDevice *device)
QPainter()
~QPainter()
const QBrush & background() const
Qt::BGMode backgroundMode() const
bool begin(QPaintDevice *device)
void beginNativePainting()
QRectF boundingRect(const QRectF &rectangle, int flags, const QString &text)
QRect boundingRect(const QRect &rectangle, int flags, const QString &text)
QRect boundingRect(int x, int y, int w, int h, int flags, const QString &text)
QRectF boundingRect(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())
const QBrush & brush() const
QPoint brushOrigin() const
QRectF clipBoundingRect() const
QPainterPath clipPath() const
QRegion clipRegion() const
QTransform combinedTransform() const
QPainter::CompositionMode compositionMode() const
QPaintDevice * device() const
const QTransform & deviceTransform() const
void drawArc(const QRectF &rectangle, int startAngle, int spanAngle)
void drawArc(const QRect &rectangle, int startAngle, int spanAngle)
void drawArc(int x, int y, int width, int height, int startAngle, int spanAngle)
void drawChord(const QRectF &rectangle, int startAngle, int spanAngle)
void drawChord(int x, int y, int width, int height, int startAngle, int spanAngle)
void drawChord(const QRect &rectangle, int startAngle, int spanAngle)
void drawConvexPolygon(const QPointF *points, int pointCount)
void drawConvexPolygon(const QPolygonF &polygon)
void drawConvexPolygon(const QPoint *points, int pointCount)
void drawConvexPolygon(const QPolygon &polygon)
void drawEllipse(const QRectF &rectangle)
void drawEllipse(const QRect &rectangle)
void drawEllipse(int x, int y, int width, int height)
void drawEllipse(const QPointF &center, qreal rx, qreal ry)
void drawEllipse(const QPoint &center, int rx, int ry)
void drawGlyphRun(const QPointF &position, const QGlyphRun &glyphs)
void drawImage(const QRectF &target, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(const QRect &target, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(const QPointF &point, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(const QPoint &point, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(const QRectF &rectangle, const QImage &image)
void drawImage(const QRect &rectangle, const QImage &image)
void drawImage(const QPointF &point, const QImage &image)
void drawImage(const QPoint &point, const QImage &image)
void drawImage(int x, int y, const QImage &image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawLine(const QLineF &line)
void drawLine(const QLine &line)
void drawLine(int x1, int y1, int x2, int y2)
void drawLine(const QPoint &p1, const QPoint &p2)
void drawLine(const QPointF &p1, const QPointF &p2)
void drawLines(const QLineF *lines, int lineCount)
void drawLines(const QList<QLineF> &lines)
void drawLines(const QPointF *pointPairs, int lineCount)
void drawLines(const QList<QPointF> &pointPairs)
void drawLines(const QLine *lines, int lineCount)
void drawLines(const QList<QLine> &lines)
void drawLines(const QPoint *pointPairs, int lineCount)
void drawLines(const QList<QPoint> &pointPairs)
void drawPath(const QPainterPath &path)
void drawPicture(const QPointF &point, const QPicture &picture)
void drawPicture(int x, int y, const QPicture &picture)
void drawPicture(const QPoint &point, const QPicture &picture)
void drawPie(const QRectF &rectangle, int startAngle, int spanAngle)
void drawPie(int x, int y, int width, int height, int startAngle, int spanAngle)
void drawPie(const QRect &rectangle, int startAngle, int spanAngle)
void drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)
void drawPixmap(const QRect &target, const QPixmap &pixmap, const QRect &source)
void drawPixmap(int x, int y, int w, int h, const QPixmap &pixmap, int sx, int sy, int sw, int sh)
void drawPixmap(int x, int y, const QPixmap &pixmap, int sx, int sy, int sw, int sh)
void drawPixmap(const QPointF &point, const QPixmap &pixmap, const QRectF &source)
void drawPixmap(const QPoint &point, const QPixmap &pixmap, const QRect &source)
void drawPixmap(const QPointF &point, const QPixmap &pixmap)
void drawPixmap(const QPoint &point, const QPixmap &pixmap)
void drawPixmap(int x, int y, const QPixmap &pixmap)
void drawPixmap(const QRect &rectangle, const QPixmap &pixmap)
void drawPixmap(int x, int y, int width, int height, const QPixmap &pixmap)
void drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, QPainter::PixmapFragmentHints hints = PixmapFragmentHints())
void drawPoint(const QPointF &position)
void drawPoint(const QPoint &position)
void drawPoint(int x, int y)
void drawPoints(const QPointF *points, int pointCount)
void drawPoints(const QPolygonF &points)
void drawPoints(const QPoint *points, int pointCount)
void drawPoints(const QPolygon &points)
void drawPolygon(const QPointF *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)
void drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill)
void drawPolygon(const QPoint *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)
void drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill)
void drawPolyline(const QPointF *points, int pointCount)
void drawPolyline(const QPolygonF &points)
void drawPolyline(const QPoint *points, int pointCount)
void drawPolyline(const QPolygon &points)
void drawRect(const QRectF &rectangle)
void drawRect(int x, int y, int width, int height)
void drawRect(const QRect &rectangle)
void drawRects(const QRectF *rectangles, int rectCount)
void drawRects(const QList<QRectF> &rectangles)
void drawRects(const QRect *rectangles, int rectCount)
void drawRects(const QList<QRect> &rectangles)
void drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
void drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
void drawStaticText(const QPointF &topLeftPosition, const QStaticText &staticText)
END_OF_DOCUMENT_MARKER
void drawStaticText(const QPoint &topLeftPosition, const QStaticText &staticText)
void drawStaticText(int left, int top, const QStaticText &staticText)
void drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)
void drawText(const QPointF &position, const QString &text)
void drawText(const QPoint &position, const QString &text)
void drawText(int x, int y, const QString &text)
void drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect = nullptr)
void drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect = nullptr)
void drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())
void drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &position = QPointF())
void drawTiledPixmap(int x, int y, int width, int height, const QPixmap &pixmap, int sx = 0, int sy = 0)
void drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &position = QPoint())
bool end()
void endNativePainting()
void eraseRect(const QRectF &rectangle)
void eraseRect(int x, int y, int width, int height)
void eraseRect(const QRect &rectangle)
void fillPath(const QPainterPath &path, const QBrush &brush)
void fillRect(const QRectF &rectangle, const QBrush &brush)
void fillRect(int x, int y, int width, int height, const QBrush &brush)
void fillRect(const QRect &rectangle, const QBrush &brush)
void fillRect(const QRectF &rectangle, const QColor &color)
void fillRect(int x, int y, int width, int height, const QColor &color)
void fillRect(const QRect &rectangle, const QColor &color)
void fillRect(int x, int y, int width, int height, Qt::GlobalColor color)
void fillRect(const QRect &rectangle, Qt::GlobalColor color)
void fillRect(const QRectF &rectangle, Qt::GlobalColor color)
void fillRect(int x, int y, int width, int height, Qt::BrushStyle style)
void fillRect(const QRect &rectangle, Qt::BrushStyle style)
void fillRect(const QRectF &rectangle, Qt::BrushStyle style)
void fillRect(int x, int y, int width, int height, QGradient::Preset preset)
void fillRect(const QRect &rectangle, QGradient::Preset preset)
void fillRect(const QRectF &rectangle, QGradient::Preset preset)
const QFont & font() const
QFontInfo fontInfo() const
QFontMetrics fontMetrics() const
bool hasClipping() const
bool isActive() const
Qt::LayoutDirection layoutDirection() const
qreal opacity() const
QPaintEngine * paintEngine() const
const QPen & pen() const
QPainter::RenderHints renderHints() const
void resetTransform()
void restore()
void rotate(qreal angle)
void save()
void scale(qreal sx, qreal sy)
void setBackground(const QBrush &brush)
void setBackgroundMode(Qt::BGMode mode)
void setBrush(const QBrush &brush)
void setBrush(Qt::BrushStyle style)
void setBrushOrigin(const QPointF &position)
void setBrushOrigin(int x, int y)
void setBrushOrigin(const QPoint &position)
void setClipPath(const QPainterPath &path, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipRect(const QRectF &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipRect(const QRect &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipRegion(const QRegion &region, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipping(bool enable)
void setCompositionMode(QPainter::CompositionMode mode)
void setFont(const QFont &font)
void setLayoutDirection(Qt::LayoutDirection direction)
void setOpacity(qreal opacity)
void setPen(const QPen &pen)
void setPen(const QColor &color)
void setPen(Qt::PenStyle style)
void setRenderHint(QPainter::RenderHint hint, bool on = true)
void setRenderHints(QPainter::RenderHints hints, bool on = true)
void setTransform(const QTransform &transform, bool combine = false)
void setViewTransformEnabled(bool enable)
void setViewport(const QRect &rectangle)
void setViewport(int x, int y, int width, int height)
void setWindow(const QRect &rectangle)
void setWindow(int x, int y, int width, int height)
void setWorldMatrixEnabled(bool enable)
void setWorldTransform(const QTransform &matrix, bool combine = false)
void shear(qreal sh, qreal sv)
void strokePath(const QPainterPath &path, const QPen &pen)
bool testRenderHint(QPainter::RenderHint hint) const
const QTransform & transform() const
void translate(const QPointF &offset)
void translate(const QPoint &offset)
void translate(qreal dx, qreal dy)
bool viewTransformEnabled() const
QRect viewport() const
QRect window() const
bool worldMatrixEnabled() const
const QTransform & worldTransform() const

Подробное описание

QPainter предоставляет высокооптимизированные функции для большинства операций рисования, необходимых графическим программам. Он может рисовать все, от простых линий до сложных фигур, таких как секторы и хорды. Он также может рисовать выровненный текст и пиксельмапы. Обычно он рисует в «естественной» системе координат, но также может выполнять преобразования вида и мира. QPainter может работать с любым объектом, унаследованным от класса QPaintDevice.

Общее использование QPainter находится внутри события рисования виджета: создайте и настройте (например, установите перо или кисть) painter. Затем нарисуйте. Не забудьте уничтожить объект QPainter после рисования. Например:

void SimpleExampleWidget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setPen(Qt::blue);
    painter.setFont(QFont("Arial", 30));
    painter.drawText(rect(), Qt::AlignCenter, "Qt");
}

Основной функциональностью QPainter является рисование, но класс также предоставляет несколько функций, которые позволяют настраивать параметры QPainter и качество рендеринга, а также другие, которые позволяют выполнять обрезку. Кроме того, вы можете контролировать, как различные фигуры объединяются, задавая режим композиции painter.

Функция isActive() указывает, активен ли painter. Painter активируется функцией begin() и конструктором, принимающим аргумент QPaintDevice. Функция end() и деструктор деактивируют его.

Вместе с классами QPaintDevice и QPaintEngine QPainter образуют основу системы рисования Qt. QPainter — это класс, используемый для выполнения операций рисования. QPaintDevice представляет устройство, на которое можно нарисовать с помощью QPainter. QPaintEngine предоставляет интерфейс, который painter использует для рисования на различных типах устройств. Если painter активен, device() возвращает устройство рисования, на котором рисует painter, а paintEngine() возвращает движок рисования, на котором в настоящее время работает painter. Дополнительную информацию см. в разделе Система рисования.

Иногда бывает желательно заставить кого-то другого нарисовать на необычном устройстве QPaintDevice. QPainter поддерживает статическую функцию для этого, setRedirected().

Предупреждение: Когда устройство рисования — это виджет, QPainter может использоваться только внутри функции paintEvent() или в функции, вызываемой paintEvent().

Настройки

Есть несколько настроек, которые вы можете настроить, чтобы QPainter рисовал в соответствии с вашими предпочтениями:

  • font() — шрифт, используемый для рисования текста. Если объект отрисовки isActive(), вы можете получить информацию о текущем шрифте и его метриках, используя функции fontInfo() и fontMetrics() соответственно.
  • brush() определяет цвет или узор, используемый для заливки фигур.
  • pen() определяет цвет или штриховку, используемые для рисования линий или границ.
  • backgroundMode() определяет, есть ли фон background() или нет, т.е. он либо Qt::OpaqueMode, либо Qt::TransparentMode.
  • background() применяется только тогда, когда backgroundMode() равен Qt::OpaqueMode, а pen() — штриховка. В этом случае он описывает цвет пикселей фона в штриховке.
  • brushOrigin() определяет начало растровых кистей, обычно начало фона виджета.
  • viewport(), window(), worldTransform() составляют систему координат преобразования объекта отрисовки. Дополнительную информацию см. в разделе Преобразования координат и документации по Системе координат.
  • hasClipping() указывает, применяется ли обрезка к объекту отрисовки вообще. (Устройство отрисовки также использует обрезку.) Если применяется обрезка, она выполняется по области clipRegion().
  • layoutDirection() определяет направление выравнивания, используемое объектом отрисовки при рисовании текста.
  • worldMatrixEnabled() указывает, включено ли преобразование мировых координат.
  • viewTransformEnabled() указывает, включено ли преобразование координат представления.

Обратите внимание, что некоторые из этих настроек дублируют настройки в некоторых устройствах отрисовки, например, QWidget::font(). Функция QPainter::begin() (или, что эквивалентно, конструктор QPainter) копирует эти атрибуты из устройства отрисовки.

Вы можете в любое время сохранить состояние QPainter, вызвав функцию save(), которая сохраняет все доступные настройки в внутренней стеке. Функция restore() восстанавливает их обратно.

Рисование

QPainter предоставляет функции для рисования большинства примитивов: drawPoint(), drawPoints(), drawLine(), drawRect(), drawRoundedRect(), drawEllipse(), drawArc(), drawPie(), drawChord(), drawPolyline(), drawPolygon(), drawConvexPolygon() и drawCubicBezier(). Две удобные функции drawRects() и drawLines() рисуют заданное количество прямоугольников или линий в заданном массиве QRects или QLines с использованием текущей кисти и пера.

Класс QPainter также предоставляет функцию fillRect(), которая заполняет заданный QRect заданной QBrush, и функцию eraseRect(), которая стирает область внутри заданного прямоугольника.

Все эти функции имеют целочисленные и плавающие версии.

Пример базового рисования

Пример Basic Drawing демонстрирует, как отображать базовые графические примитивы в различных стилях с помощью класса QPainter.

Если вам нужно нарисовать сложную фигуру, особенно если вам нужно делать это многократно, рассмотрите возможность создания QPainterPath и рисования с помощью drawPath().

Пример траекторий рисования

Класс QPainterPath предоставляет контейнер для операций рисования, позволяющий создавать и повторно использовать графические фигуры.

Пример Painter Paths демонстрирует, как можно использовать пути отрисовки для построения сложных фигур для рендеринга.

QPainter также предоставляет функцию fillPath(), которая заполняет заданный QPainterPath заданной QBrush, и функцию strokePath(), которая рисует контур заданного пути (т. е. обводит путь).

См. также пример Деформация векторов, который демонстрирует, как использовать продвинутые векторные техники для рисования текста с помощью QPainterPath, пример Градиенты, который демонстрирует различные типы градиентов, доступные в Qt, и пример Обводка пути, который демонстрирует встроенные пунктирные узоры Qt и показывает, как настраивать узоры для расширения доступного диапазона.

Деформация векторов Градиенты Обводка пути

Рисование текста выполняется с помощью drawText(). Если вам нужна точная позиция, boundingRect() сообщает вам, где будет отображаться команда drawText().

Рисование растровых изображений и картинок

Существуют функции для рисования растровых изображений/картинок, а именно drawPixmap(), drawImage() и drawTiledPixmap(). Как drawPixmap(), так и drawImage() дают одинаковый результат, за исключением того, что drawPixmap() быстрее на экране, а drawImage() может быть быстрее на QPrinter или других устройствах.

Есть функция drawPicture(), которая рисует содержимое целого QPicture. Функция drawPicture() игнорирует все настройки объекта отрисовки, так как QPicture имеет свои собственные настройки.

Рисование версий растровых изображений и картинок высокого разрешения

Версии растровых изображений высокого разрешения имеют значение коэффициента пикселей устройства, большее 1 (см. QImageReader, QPixmap::devicePixelRatio()). Если оно соответствует значению базового QPaintDevice, то оно рисуется непосредственно на устройстве без дополнительных преобразований.

Например, это происходит при рисовании QPixmap размером 64x64 пикселя с коэффициентом пикселей устройства 2 на экране с высокой плотностью пикселей, у которого также коэффициент пикселей устройства равен 2. Обратите внимание, что растровое изображение фактически имеет размер 32x32 пикселя в пространстве пользователя. Пути кода в Qt, которые рассчитывают геометрию макета на основе размера растрового изображения, будут использовать этот размер. В итоге растровое изображение отображается как растровое изображение высокой плотности пикселей, а не большое растровое изображение.

Качество рендеринга

Для получения оптимального результата рендеринга с помощью QPainter следует использовать независимый от платформы QImage в качестве устройства отрисовки; использование QImage гарантирует, что результат будет иметь одинаковое представление пикселей на любой платформе.

Класс QPainter также предоставляет возможность управления качеством рендеринга с помощью перечисления RenderHint и поддержки плавающей точки: все функции для рисования примитивов имеют плавающую версию. Часто они используются в сочетании с подсказкой рендеринга QPainter::Antialiasing.

Пример концентрических окружностей

Пример Concentric Circles демонстрирует улучшенное качество рендеринга, которое можно получить с помощью плавающей точки и сглаживания при рисовании пользовательских виджетов.

Главное окно приложения отображает несколько виджетов, которые рисуются с различными комбинациями точности и сглаживания.

Перечисление RenderHint определяет флаги для QPainter, которые могут или не могут соблюдаться любым движком. QPainter::Antialiasing указывает, что движок должен сглаживать края примитивов, если это возможно, QPainter::TextAntialiasing указывает, что движок должен сглаживать текст, если это возможно, а QPainter::SmoothPixmapTransform указывает, что движок должен использовать алгоритм плавной трансформации растрового изображения.

Функция renderHints() возвращает флаг, определяющий установленные подсказки рендеринга для этого объекта отрисовки. Используйте функцию setRenderHint() для установки или сброса текущих RenderHints.

Преобразования координат

Обычно QPainter работает в собственной системе координат устройства (обычно пиксели), но QPainter хорошо поддерживает преобразования координат.

nop rotate() scale() translate()

Наиболее часто используемые преобразования — масштабирование, поворот, сдвиг и наклон. Используйте функцию scale() для масштабирования системы координат на заданный сдвиг, функцию rotate() для поворота по часовой стрелке и translate() для сдвига (т.е. добавления заданного смещения к точкам). Также можно повернуть систему координат вокруг начала координат с помощью функции shear(). Обратитесь к примеру Affine Transformations для визуализации наклонной системы координат.

См. также пример Transformations, который показывает, как преобразования влияют на способ, которым QPainter отображает графические примитивы. В частности, он демонстрирует, как порядок преобразований влияет на результат.

class="generic" width="100%">
Пример аффинных преобразований

Пример Affine Transformations демонстрирует возможность Qt выполнять аффинные преобразования над операциями рисования. Демонстрация также позволяет пользователю экспериментировать с операциями преобразования и немедленно видеть результаты.

Все операции преобразования работают с преобразованием worldTransform(). Матрица преобразует точку на плоскости в другую точку. Более подробную информацию о матрице преобразования см. в документации по системе координат и QTransform.

Функция setWorldTransform() может заменить или добавить к текущему worldTransform(). Функция resetTransform() сбрасывает все преобразования, которые были выполнены с помощью функций translate(), scale(), shear(), rotate(), setWorldTransform(), setViewport() и setWindow(). Функция deviceTransform() возвращает матрицу, которая преобразует логические координаты в устройство-зависимые координаты устройства рисования. Последняя функция нужна только при использовании платформо-зависимых команд рисования на платформо-зависимой ручке, а платформа не выполняет преобразования напрямую.

При рисовании с помощью QPainter мы указываем точки, используя логические координаты, которые затем преобразуются в физические координаты устройства рисования. Сопоставление логических координат с физическими координатами выполняется с помощью combinedTransform() QPainter, которая является комбинацией viewport(), window() и worldTransform(). viewport() представляет физические координаты, задающие произвольный прямоугольник, window() описывает тот же прямоугольник в логических координатах, а worldTransform() совпадает с матрицей преобразования.

См. также систему координат

Обрезка

QPainter может обрезать любую операцию рисования до прямоугольника, области или векторного пути. Текущая обрезка доступна с помощью функций clipRegion() и clipPath(). Предпочтение путей или областей (более быстро) зависит от базового paintEngine(). Например, движок рисования QImage предпочитает пути, а движок рисования X11 предпочитает области. Установка обрезки выполняется в логических координатах художника.

После обрезки QPainter устройство рисования также может обрезать. Например, большинство виджетов обрезают пиксели, используемые дочерними виджетами, а большинство принтеров обрезают область около краев бумаги. Эта дополнительная обрезка не отражается в возвращаемом значении clipRegion() или hasClipping().

Режимы композиции

QPainter предоставляет перечисление CompositionMode, которое определяет правила Портера-Даффа для композиции цифровых изображений; оно описывает модель объединения пикселей на одном изображении, источнике, с пикселями на другом изображении, назначении.

Две наиболее распространенные формы композиции — Source и SourceOver. Source используется для рисования непрозрачных объектов на устройстве рисования. В этом режиме каждый пиксель источника заменяет соответствующий пиксель назначения. В режиме композиции SourceOver объект источника прозрачен и рисуется поверх объекта назначения.

Обратите внимание, что преобразование композиции работает по пикселям. По этой причине существует разница между использованием самого графического примитива и его ограничивающего прямоугольника: ограничивающий прямоугольник содержит пиксели с alpha == 0 (т.е. пиксели вокруг примитива). Эти пиксели перезапишут пиксели другого изображения, эффективно очистив их, в то время как примитив перезапишет только свою собственную область.

class="generic" width="100%">
Пример режимов композиции

Пример Composition Modes, доступный в каталоге примеров Qt, позволяет экспериментировать с различными режимами композиции и немедленно видеть результаты.

Ограничения

Если вы используете координаты с растровым движком Qt, важно отметить, что, хотя координаты больше, чем +/- 215 могут быть использованы, любое рисование с координатами за пределами этого диапазона не гарантируется; рисование может быть обрезано. Это связано с использованием short int в реализации.

Контуры, созданные инструментом рисования Qt, являются лишь приближением при работе с кривыми фигурами. В большинстве случаев невозможно представить контур сегмента кривой Безье с помощью другого сегмента кривой Безье, поэтому Qt приближает контуры кривых, используя несколько меньших кривых. По соображениям производительности существует ограничение на количество кривых, используемых Qt для этих контуров, и поэтому при использовании больших ширины пера или масштабов ошибка контура увеличивается. Для генерации контуров с меньшими ошибками можно использовать класс QPainterPathStroker, который имеет функцию-член setCurveThreshold, которая позволяет пользователю указать допустимую ошибку. Другим решением является предварительное преобразование путей в полигоны, а затем рисование полигонов вместо них.

Производительность

QPainter — это мощный фреймворк, который позволяет разработчикам выполнять множество графических операций, таких как градиенты, режимы композиции и векторную графику. И QPainter может делать это на различных аппаратных и программных платформах. Естественно, базовая комбинация аппаратного и программного обеспечения оказывает влияние на производительность, и гарантировать, что каждая операция будет быстрой в сочетании со всеми различными комбинациями режимов композиции, кистей, обрезки, преобразования и т.д., близко к невыполнимой задаче из-за количества перестановок. В качестве компромисса мы выбрали подмножество API QPainter и бэкэндов, где производительность гарантируется как можно лучше для данной комбинации аппаратного и программного обеспечения.

Бэкэнды, на которых мы сосредоточены как на высокопроизводительных двигателях:

  • Растровый — Этот бэкэнд реализует все отрисовки в чистом программном обеспечении и всегда используется для отрисовки в QImages. Для оптимальной производительности используйте только типы форматов QImage::Format_ARGB32_Premultiplied, QImage::Format_RGB32 или QImage::Format_RGB16. Любой другой формат, включая QImage::Format_ARGB32, имеет значительно худшую производительность. Этот движок используется по умолчанию для QWidget и QPixmap.
  • OpenGL 2.0 (ES) — Этот бэкэнд является основным бэкэндом для аппаратного ускорения графики. Он может работать на настольных компьютерах и встроенных устройствах, поддерживающих спецификации OpenGL 2.0 или OpenGL/ES 2.0. Это включает в себя большинство графических процессоров, выпущенных за последние несколько лет. Движок можно активировать, используя QPainter на QOpenGLWidget.

Эти операции:

  • Простые преобразования, означающие сдвиг и масштабирование, а также повороты на 0, 90, 180, 270 градусов.
  • drawPixmap() в сочетании с простыми преобразованиями и непрозрачностью с режимом преобразования без сглаживания (QPainter::SmoothPixmapTransform не включен в качестве параметра отрисовки).
  • Заливка прямоугольников твердым цветом, градиенты линейные двухцветные и простые преобразования.
  • Обрезка прямоугольников с простыми преобразованиями и пересечениями обрезки.
  • Режимы композиции QPainter::CompositionMode_Source и QPainter::CompositionMode_SourceOver.
  • Заливка прямоугольников с закругленными углами, используя заливки твердым цветом и двухцветными линейными градиентами.
  • Патчи пикселей 3x3, через qDrawBorderPixmap.

Этот список дает представление о том, какие функции безопасно использовать в приложении, где производительность имеет решающее значение. В некоторых случаях и другие операции могут быть быстрыми, но прежде чем широко использовать их, рекомендуется провести бенчмаркинг и проверить их на системе, где в конечном итоге будет работать программное обеспечение. Также есть случаи, когда дорогостоящие операции приемлемы, например, когда результат кэшируется в QPixmap.

См. также QPaintDevice, QPaintEngine, Qt SVG, Пример базового рисования и Функции полезных инструментов рисования.

Документация по типу членов

enum QPainter::CompositionMode

Определяет режимы, поддерживаемые для композиции цифровых изображений. Режимы композиции используются для указания того, как пиксели на одном изображении, источнике, объединяются с пикселями на другом изображении, назначении.

Обратите внимание, что битовые режимы растровых операций, обозначенные префиксом RasterOp, поддерживаются только в двигателях рисования X11 и растрового типа. Это означает, что единственный способ использовать эти режимы на Mac — через QImage. Режимы RasterOp, обозначенные режимами смешивания, не поддерживаются для перьев и кистей с альфа-компонентами. Кроме того, включение параметра отрисовки QPainter::Antialiasing фактически отключит режимы RasterOp.

Наиболее распространенным типом является SourceOver (часто называемый просто альфа-смешением), где пиксель источника смешивается поверх пикселя назначения таким образом, что альфа-компонент источника определяет прозрачность пикселя.

Несколько режимов композиции требуют альфа-канала в исходных или целевых изображениях для получения эффекта. Для оптимальной производительности предпочтительным является формат изображения Format_ARGB32_Premultiplied.

Когда установлен режим композиции, он применяется ко всем операторам рисования, перам, кистям, градиентам и рисованию растровых изображений/изображений.

Константа Значение Описание
QPainter::CompositionMode_SourceOver 0 Это режим по умолчанию. Альфа-значение источника используется для смешивания пикселя поверх целевого.
QPainter::CompositionMode_DestinationOver 1 Альфа-значение целевого используется для смешивания его поверх пикселей источника. Этот режим является обратным к CompositionMode_SourceOver.
QPainter::CompositionMode_Clear 2 Пиксели в целевом очищаются (устанавливаются в полностью прозрачные) независимо от источника.
QPainter::CompositionMode_Source 3 Результат — пиксель источника. (Это означает базовую операцию копирования и идентично SourceOver, когда пиксель источника непрозрачен).
QPainter::CompositionMode_Destination 4 Результат — пиксель назначения. Это означает, что смешивание не оказывает никакого эффекта. Этот режим является обратным к CompositionMode_Source.
QPainter::CompositionMode_SourceIn 5 Результат — источник, где альфа-значение уменьшено на альфа-значение назначения.
QPainter::CompositionMode_DestinationIn 6 Результат — назначение, где альфа-значение уменьшено на альфа-значение источника. Этот режим является обратным к CompositionMode_SourceIn.
QPainter::CompositionMode_SourceOut 7 Результат — источник, где альфа-значение уменьшено на обратное значение альфа-значения назначения.
QPainter::CompositionMode_DestinationOut 8 Результат — назначение, где альфа-значение уменьшено на обратное значение альфа-значения источника. Этот режим является обратным к CompositionMode_SourceOut.
QPainter::CompositionMode_SourceAtop 9 Пиксель источника смешивается поверх целевого, при этом альфа-значение пикселя источника уменьшается на альфа-значение пикселя назначения.
QPainter::CompositionMode_DestinationAtop 10 Пиксель назначения смешивается поверх источника, при этом альфа-значение пикселя назначения уменьшается на альфа-значение пикселя назначения. Этот режим является обратным к CompositionMode_SourceAtop.
QPainter::CompositionMode_Xor 11 Источник, альфа-значение которого уменьшено на обратное значение альфа-значения назначения, объединяется с назначением, альфа-значение которого уменьшено на обратное значение альфа-значения источника. CompositionMode_Xor не совпадает с побитовым Xor.
QPainter::CompositionMode_Plus 12 Альфа-значение и цвет пикселей источника и назначения суммируются.
QPainter::CompositionMode_Multiply 13 Результат — цвет источника, умноженный на назначение. Умножение цвета на белый оставляет цвет неизменным, а умножение цвета на черный дает черный.
QPainter::CompositionMode_Screen 14 Цвета источника и назначения инвертируются, а затем умножаются. Трафаретная печать цвета на белом дает белый, а трафаретная печать цвета на черном оставляет цвет неизменным.
QPainter::CompositionMode_Overlay 15 Умножает или трафаретно печатает цвета в зависимости от цвета назначения. Цвет назначения смешивается с цветом источника, чтобы отразить светлоту или темноту назначения.
QPainter::CompositionMode_Darken 16 Выбирается более темный из цветов источника и назначения.
QPainter::CompositionMode_Lighten 17 Выбирается более светлый из цветов источника и назначения.
QPainter::CompositionMode_ColorDodge 18 Цвет назначения осветляется, чтобы отразить цвет источника. Черный цвет источника оставляет цвет назначения неизменным.
QPainter::CompositionMode_ColorBurn 19 Цвет назначения затемняется, чтобы отразить цвет источника. Белый цвет источника оставляет цвет назначения неизменным.
QPainter::CompositionMode_HardLight 20 Умножает или трафаретно печатает цвета в зависимости от цвета источника. Светлый цвет источника осветлит цвет назначения, а темный цвет источника затемнит цвет назначения.
QPainter::CompositionMode_SoftLight 21 Затемняет или осветляет цвета в зависимости от цвета источника. Аналогично CompositionMode_HardLight.
QPainter::CompositionMode_Difference 22 Вычитает более темный из цветов из более светлого. Рисование белым инвертирует цвет назначения, а рисование черным оставляет цвет назначения неизменным.
QPainter::CompositionMode_Exclusion 23 Аналогично CompositionMode_Difference, но с меньшим контрастом. Рисование белым инвертирует цвет назначения, а рисование черным оставляет цвет назначения неизменным.
QPainter::RasterOp_SourceOrDestination 24 Выполняет побитовую операцию ИЛИ над пикселями источника и назначения (src OR dst).
QPainter::RasterOp_SourceAndDestination 25 Выполняет побитовую операцию И над пикселями источника и назначения (src AND dst).
QPainter::RasterOp_SourceXorDestination 26 Выполняет побитовую операцию XOR над пикселями источника и назначения (src XOR dst).
QPainter::RasterOp_NotSourceAndNotDestination 27 Выполняет побитовую операцию НЕ ИЛИ над пикселями источника и назначения ((NOT src) AND (NOT dst)).
QPainter::RasterOp_NotSourceOrNotDestination 28 Выполняет побитовую операцию НЕ И над пикселями источника и назначения ((NOT src) OR (NOT dst)).
QPainter::RasterOp_NotSourceXorDestination 29 Выполняет побитовую операцию, где пиксели источника инвертируются, а затем выполняется операция XOR с назначением ((NOT src) XOR dst).
QPainter::RasterOp_NotSource 30 Выполняет побитовую операцию, где пиксели источника инвертируются (NOT src).
QPainter::RasterOp_NotSourceAndDestination 31 Выполняет побитовую операцию, где источник инвертируется, а затем выполняется операция И с назначением ((NOT src) AND dst).
QPainter::RasterOp_SourceAndNotDestination 32 Выполняет побитовую операцию, где источник выполняет операцию И с инвертированными пикселями назначения (src AND (NOT dst)).
QPainter::RasterOp_NotSourceOrDestination 33 Выполняет побитовую операцию, где источник инвертируется, а затем выполняется операция ИЛИ с назначением ((NOT src) OR dst).
QPainter::RasterOp_ClearDestination 35 Пиксели в целевом очищаются (устанавливаются в 0) независимо от источника.
QPainter::RasterOp_SetDestination 36 Пиксели в целевом устанавливаются (устанавливаются в 1) независимо от источника.
QPainter::RasterOp_NotDestination 37 Выполняет побитовую операцию, где пиксели назначения инвертируются (NOT dst).
QPainter::RasterOp_SourceOrNotDestination 34 Выполняет побитовую операцию, где источник выполняет операцию ИЛИ с инвертированными пикселями назначения (src OR (NOT dst)).

См. также compositionMode(), setCompositionMode(), Режимы композиции, и Пример композиции изображений.

enum QPainter::PixmapFragmentHintflags QPainter::PixmapFragmentHints

Константа Значение Описание
QPainter::OpaqueHint 0x01 Указывает, что фрагменты растрового изображения, которые будут нарисованы, непрозрачны. Непрозрачные фрагменты потенциально быстрее рисуются.

Тип PixmapFragmentHints является псевдонимом для QFlags<PixmapFragmentHint>. Он хранит комбинацию значений PixmapFragmentHint, объединенных операцией ИЛИ.

См. также QPainter::drawPixmapFragments() и QPainter::PixmapFragment.

enum QPainter::RenderHintflags QPainter::RenderHints

Renderhints используются для указания флагов для QPainter, которые могут или не могут быть учтены любым конкретным движком.

Постоянная Значение Описание
QPainter::Antialiasing 0x01 Указывает, что движок должен выполнять сглаживание краёв примитивов, если это возможно.
QPainter::TextAntialiasing 0x02 Указывает, что движок должен выполнять сглаживание текста, если это возможно. Для принудительного отключения сглаживания текста не используйте этот параметр. Вместо этого установите QFont::NoAntialias для стратегии стилей шрифта.
QPainter::SmoothPixmapTransform 0x04 Указывает, что движок должен использовать алгоритм плавной трансформации растровых изображений (например, билинейный), а не ближайшего соседа.
QPainter::LosslessImageRendering 0x40 Использовать бесприбыльное отображение изображений, когда это возможно. В настоящее время этот параметр используется только при использовании QPainter для вывода файла PDF через QPrinter или QPdfWriter, где вызовы drawImage()/drawPixmap() будут кодировать изображения с использованием алгоритма без потерь, вместо сжатия с потерями JPEG. Это значение было добавлено в Qt 5.13.

Тип RenderHints — это псевдоним для QFlags<RenderHint>. Он хранит логическое ИЛИ комбинацию значений RenderHint.

См. такжеrenderHints(), setRenderHint(), Качество отображения и Пример концентрических кругов.

Документация по функциям-членам

QPainter::QPainter(QPaintDevice *device)

Создаёт рисовальщик, который сразу начинает рисовать на устройстве device.

Этот конструктор удобен для кратковременных рисовальщиков, например, в QWidget::paintEvent() и должен использоваться только один раз. Конструктор вызывает begin() за вас, а деструктор QPainter автоматически вызывает end().

Вот пример с использованием begin() и end():

void MyWidget::paintEvent(QPaintEvent *)
{
    QPainter p;
    p.begin(this);
    p.drawLine(drawingCode);        // drawing code
    p.end();
}

Тот же пример с использованием этого конструктора:

void MyWidget::paintEvent(QPaintEvent *)
{
    QPainter p(this);
    p.drawLine(drawingCode);        // drawing code
}

Поскольку конструктор не может предоставить обратную связь при неудачной инициализации рисовальщика, для рисования на внешних устройствах, например, принтерах, следует использовать begin() и end().

См. также begin() и end().

QPainter::QPainter()

Создаёт рисовальщик.

См. также begin() и end().

QPainter::~QPainter()

Уничтожает рисовальщик.

const QBrush &QPainter::background() const

Возвращает текущую кисть фона.

См. также setBackground() и Параметры.

Qt::BGMode QPainter::backgroundMode() const

Возвращает текущий режим фона.

См. также setBackgroundMode() и Параметры.

bool QPainter::begin(QPaintDevice *device)

Начинает рисование на устройстве device и возвращает true при успехе; в противном случае возвращает false.

Обратите внимание, что все настройки рисовальщика (setPen(), setBrush() и т. д.) сбрасываются до значений по умолчанию при вызове begin().

Возможные ошибки — это серьёзные проблемы, такие как:

painter->begin(0); // impossible - paint device cannot be 0

QPixmap image(0, 0);
painter->begin(&image); // impossible - image.isNull() == true;

painter->begin(myWidget);
painter2->begin(myWidget); // impossible - only one painter at a time

Обратите внимание, что большую часть времени можно использовать один из конструкторов вместо begin(), а end() автоматически выполняется при уничтожении.

Предупреждение: Устройство отображения может быть обработано только одним рисовальщиком за раз.

Предупреждение: Рисование на QImage с форматом QImage::Format_Indexed8 не поддерживается.

См. также end() и QPainter().

void QPainter::beginNativePainting()

Очищает конвейер рисования и готовит пользователя к выдаче команд непосредственно в контексте графики нижележащего уровня. Должна следовать за вызовом endNativePainting().

Обратите внимание, что только состояния, которые изменяются в подлежащем движке рисования, будут сброшены до соответствующих значений по умолчанию. Состояния, которые мы сбрасываем, могут меняться от релиза к релизу. В настоящее время в движке OpenGL 2 следующие состояния сбрасываются:

  • отключение смешивания
  • отключение глубинных, штриховных и отсекающих тестов
  • сброс активного текстурного блока до 0
  • сброс маски глубины, функции глубины и значения глубины очистки до их значений по умолчанию
  • сброс маски штрихов, операции штрихов и функции штрихов до их значений по умолчанию
  • сброс текущего цвета до твёрдого белого

Если, например, режим полигона OpenGL изменяется пользователем внутри блока beginNativePaint()/ endNativePainting(), он не будет сброшен до состояния по умолчанию функцией endNativePainting(). Вот пример, который показывает смешение команд рисовальщика и сырых команд OpenGL:

QPainter painter(this);
painter.fillRect(0, 0, 128, 128, Qt::green);
painter.beginNativePainting();

glEnable(GL_SCISSOR_TEST);
glScissor(0, 0, 64, 64);

glClearColor(1, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);

glDisable(GL_SCISSOR_TEST);

painter.endNativePainting();

См. также endNativePainting().

QRectF QPainter::boundingRect(const QRectF &rectangle, int flags, const QString &text)

Возвращает ограничивающую прямоугольник текста, как он будет отображён внутри заданного rectangle с указанными flags с помощью текущего установленного шрифта; т.е. функция сообщает вам, где функция drawText() будет рисовать при получении тех же аргументов.

Если text не помещается в заданный rectangle с использованием указанных flags, функция возвращает необходимый прямоугольник.

Аргумент flags — это побитовое ИЛИ следующих флагов:

  • Qt::AlignLeft
  • Qt::AlignRight
  • Qt::AlignHCenter
  • Qt::AlignTop
  • Qt::AlignBottom
  • Qt::AlignVCenter
  • Qt::AlignCenter
  • Qt::TextSingleLine
  • Qt::TextExpandTabs
  • Qt::TextShowMnemonic
  • Qt::TextWordWrap
  • Qt::TextIncludeTrailingSpaces

Если задано несколько флагов выравнивания по горизонтали или по вертикали, результат выравнивания не определён.

См. также drawText(), Qt::Alignment и Qt::TextFlag.

QRect QPainter::boundingRect(const QRect &rectangle, int flags, const QString &text)

Это перегруженная функция.

Возвращает ограничивающую прямоугольник текста, как он будет отображён внутри заданного rectangle с указанными flags с помощью текущего установленного шрифта.

QRect QPainter::boundingRect(int x, int y, int w, int h, int flags, const QString &text)

Это перегруженная функция.

Возвращает ограничивающую прямоугольник заданного text, как он будет отображён внутри прямоугольника, начинающегося в точке (x, y) с шириной w и высотой h.

QRectF QPainter::boundingRect(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())

Это перегруженная функция.

Вместо указания флагов как побитового ИЛИ Qt::AlignmentFlag и Qt::TextFlag, эта перегруженная функция принимает аргумент option. Класс QTextOption предоставляет описание общих свойств форматированного текста.

См. также QTextOption.

const QBrush &QPainter::brush() const

Возвращает текущую кисть рисовальщика.

См. также QPainter::setBrush() и Параметры.

QPoint QPainter::brushOrigin() const

Возвращает текущую установленную точку начала кисти.

См. также setBrushOrigin() и Параметры.

QRectF QPainter::clipBoundingRect() const

Возвращает ограничивающую прямоугольную область текущего обрезного региона, если он задан; в противном случае возвращает пустую прямоугольную область. Обратите внимание, что область обрезки задана в логических координатах.

Ограничивающая прямоугольная область не гарантирует, что она будет максимально узкой.

См. также setClipRect(), setClipPath(), и setClipRegion().

QPainterPath QPainter::clipPath() const

Возвращает текущую обрезную траекторию в логических координатах.

Предупреждение: QPainter не хранит объединённую обрезку явно, так как это обрабатывается базовым QPaintEngine, поэтому траектория пересоздаётся по требованию и преобразуется в текущую систему логических координат. Это потенциально ресурсоёмкая операция.

См. также setClipPath(), clipRegion(), и setClipping().

QRegion QPainter::clipRegion() const

Возвращает текущую область обрезки. Обратите внимание, что область обрезки задана в логических координатах.

Предупреждение: QPainter не хранит объединённую обрезку явно, так как это обрабатывается базовым QPaintEngine, поэтому траектория пересоздаётся по требованию и преобразуется в текущую систему логических координат. Это потенциально ресурсоёмкая операция.

См. также setClipRegion(), clipPath(), и setClipping().

QTransform QPainter::combinedTransform() const

Возвращает матрицу преобразования, объединяющую текущее окно/область просмотра и преобразование мира.

См. также setWorldTransform(), setWindow(), и setViewport().

QPainter::CompositionMode QPainter::compositionMode() const

Возвращает текущий режим композиции.

См. также CompositionMode и setCompositionMode().

QPaintDevice *QPainter::device() const

Возвращает устройство рисования, на котором в данный момент рисует данный рисовальщик, или nullptr если рисовальщик не активен.

См. также isActive().

const QTransform &QPainter::deviceTransform() const

Возвращает матрицу, которая преобразует логические координаты в устройства координаты зависимого от платформы устройства рисования.

Эта функция нужна только при использовании команд рисования платформы на платформенно-зависимой ручке (Qt::HANDLE), и платформа не выполняет преобразования неявно.

Перечисление QPaintEngine::PaintEngineFeature может быть запрошено, чтобы определить, выполняет ли платформа преобразования или нет.

См. также worldTransform() и QPaintEngine::hasFeature().

void QPainter::drawArc(const QRectF &rectangle, int startAngle, int spanAngle)

Рисует дугу, определяемую заданным rectangle, startAngle и spanAngle.

startAngle и spanAngle должны быть заданы в 1/16 долях градуса, т. е. полный круг равен 5760 (16 * 360). Положительные значения углов означают против часовой стрелки, а отрицательные значения означают по часовой стрелке. Ноль градусов соответствует положению «3 часа».

QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;

QPainter painter(this);
painter.drawArc(rectangle, startAngle, spanAngle);

См. также drawPie(), drawChord(), и Система координат.

void QPainter::drawArc(const QRect &rectangle, int startAngle, int spanAngle)

Это перегруженный метод.

Рисует дугу, определяемую заданным rectangle, startAngle и spanAngle.

void QPainter::drawArc(int x, int y, int width, int height, int startAngle, int spanAngle)

Это перегруженный метод.

Рисует дугу, определяемую прямоугольником, начинающимся в точке (x, y) с заданной width и height, и заданными startAngle и spanAngle.

void QPainter::drawChord(const QRectF &rectangle, int startAngle, int spanAngle)

Рисует хорду, определяемую заданным rectangle, startAngle и spanAngle. Хорда закрашивается текущей кистью.

startAngle и spanAngle должны быть заданы в 1/16 долях градуса, т. е. полный круг равен 5760 (16 * 360). Положительные значения углов означают против часовой стрелки, а отрицательные значения означают по часовой стрелке. Ноль градусов соответствует положению «3 часа».

QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;

QPainter painter(this);
painter.drawChord(rect, startAngle, spanAngle);

См. также drawArc(), drawPie(), и Система координат.

void QPainter::drawChord(int x, int y, int width, int height, int startAngle, int spanAngle)

Это перегруженный метод.

Рисует хорду, определяемую прямоугольником, начинающимся в точке (x, y) с заданной width и height, и заданными startAngle и spanAngle.

void QPainter::drawChord(const QRect &rectangle, int startAngle, int spanAngle)

Это перегруженный метод.

Рисует хорду, определяемую заданным rectangle, startAngle и spanAngle.

void QPainter::drawConvexPolygon(const QPointF *points, int pointCount)

Рисует выпуклый многоугольник, определяемый первыми pointCount точками в массиве points, используя текущую кисть.

static const QPointF points[4] = {
    QPointF(10.0, 80.0),
    QPointF(20.0, 10.0),
    QPointF(80.0, 30.0),
    QPointF(90.0, 70.0)
};

QPainter painter(this);
painter.drawConvexPolygon(points, 4);

Первая точка неявно соединяется с последней точкой, и многоугольник заполняется текущей кистью. Если заданный многоугольник не выпуклый, т. е. он содержит хотя бы один угол, больший 180 градусов, результаты неопределённы.

На некоторых платформах (например, X11) функция drawConvexPolygon() может быть быстрее, чем функция drawPolygon().

См. также drawPolygon(), drawPolyline(), и Система координат.

void QPainter::drawConvexPolygon(const QPolygonF &polygon)

Это перегруженный метод.

Рисует выпуклый многоугольник, определяемый polygon, используя текущую кисть.

void QPainter::drawConvexPolygon(const QPoint *points, int pointCount)

Это перегруженный метод.

Рисует выпуклый многоугольник, определяемый первыми pointCount точками в массиве points, используя текущую кисть.

void QPainter::drawConvexPolygon(const QPolygon &polygon)

Это перегруженный метод.

Рисует выпуклый многоугольник, определяемый polygon, используя текущую кисть.

void QPainter::drawEllipse(const QRectF &rectangle)

Рисует эллипс, определяемый заданным rectangle.

Заполненный эллипс имеет размер rectangle.size(). Эллипс с обводкой имеет размер rectangle.size() плюс толщина кисти.

QRectF rectangle(10.0, 20.0, 80.0, 60.0);

QPainter painter(this);
painter.drawEllipse(rectangle);

См. также drawPie() и Система координат.

void QPainter::drawEllipse(const QRect &rectangle)

Это перегруженный метод.

Рисует эллипс, определяемый заданным rectangle.

void QPainter::drawEllipse(int x, int y, int width, int height)

Это перегруженный метод.

Рисует эллипс, определяемый прямоугольником, начинающимся в точке (x, y) с заданной width и height.

void QPainter::drawEllipse(const QPointF &center, qreal rx, qreal ry)

Это перегруженный метод.

Рисует эллипс, расположенный в точке center с радиусами rx и ry.

void QPainter::drawEllipse(const QPoint &center, int rx, int ry)

Это перегруженный метод.

Рисует эллипс, расположенный в точке center с радиусами rx и ry.

void QPainter::drawGlyphRun(const QPointF &position, const QGlyphRun &glyphs)

Рисует глифы, представленные в glyphs в точке position. Position задаёт край базовой линии строки глифов. Глифы будут взяты из шрифта, выбранного в glyphs, и в позициях, указанных в glyphs.

См. также QGlyphRun::setRawFont(), QGlyphRun::setPositions() и QGlyphRun::setGlyphIndexes().

void QPainter::drawImage(const QRectF &target, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = Qt::AutoColor)

Рисует прямоугольную область source из заданного image в прямоугольник target на устройстве рисования.

Примечание: Изображение масштабируется для соответствия прямоугольнику, если размеры изображения и прямоугольника не совпадают.

Примечание: См. Рисование версий изображений высокого разрешения о том, как это влияет на QImage::devicePixelRatio().

Если изображение необходимо изменить, чтобы оно умещалось в результат с меньшим разрешением (например, преобразование из 32-битного в 8-битное), используйте flags для указания, как вы хотите это сделать.

QRectF target(10.0, 20.0, 80.0, 60.0);
QRectF source(0.0, 0.0, 70.0, 40.0);
QImage image(":/images/myImage.png");

QPainter painter(this);
painter.drawImage(target, image, source);

См. также drawPixmap() и QImage::devicePixelRatio().

void QPainter::drawImage(const QRect &target, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = Qt::AutoColor)

Это перегруженный метод.

Рисует прямоугольную область source из заданного image в прямоугольник target на устройстве рисования.

Примечание: Изображение масштабируется для соответствия прямоугольнику, если размеры изображения и прямоугольника не совпадают.

void QPainter::drawImage(const QPointF &point, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = Qt::AutoColor)

Это перегруженный метод.

Рисует прямоугольную область source из заданного image с началом в точке point.

void QPainter::drawImage(const QPoint &point, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = Qt::AutoColor)

Это перегруженный метод.

Рисует прямоугольную область source из заданного image с началом в точке point.

void QPainter::drawImage(const QRectF &rectangle, const QImage &image)

Это перегруженный метод.

Рисует заданное image в заданный прямоугольник rectangle.

Примечание: Изображение масштабируется для соответствия прямоугольнику, если размеры изображения и прямоугольника не совпадают.

void QPainter::drawImage(const QRect &rectangle, const QImage &image)

Это перегруженный метод.

Рисует заданное image в заданный прямоугольник rectangle.

Примечание: Изображение масштабируется для соответствия прямоугольнику, если размеры изображения и прямоугольника не совпадают.

void QPainter::drawImage(const QPointF &point, const QImage &image)

Это перегруженный метод.

Рисует заданное image в заданной точке point.

void QPainter::drawImage(const QPoint &point, const QImage &image)

Это перегруженный метод.

Рисует заданное image в заданной точке point.

void QPainter::drawImage(int x, int y, const QImage &image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::AutoColor)

Это перегруженный метод.

Рисует изображение в координатах (x, y), копируя часть image на устройство рисования.

(x, y) задаёт верхнюю левую точку на устройстве рисования. (sx, sy) задаёт верхнюю левую точку в image. По умолчанию (0, 0).

(sw, sh) задаёт размер изображения, подлежащего отрисовке. По умолчанию (0, 0) (и отрицательные значения) означают до правого нижнего угла изображения.

void QPainter::drawLine(const QLineF &line)

Рисует линию, определённую line.

QLineF line(10.0, 80.0, 90.0, 20.0);

QPainter(this);
painter.drawLine(line);

См. также drawLines(), drawPolyline() и Система координат.

void QPainter::drawLine(const QLine &line)

Это перегруженный метод.

Рисует линию, определённую line.

void QPainter::drawLine(int x1, int y1, int x2, int y2)

Это перегруженный метод.

Рисует линию от (x1, y1) до (x2, y2).

void QPainter::drawLine(const QPoint &p1, const QPoint &p2)

Это перегруженный метод.

Рисует линию от p1 до p2.

void QPainter::drawLine(const QPointF &p1, const QPointF &p2)

Это перегруженный метод.

Рисует линию от p1 до p2.

void QPainter::drawLines(const QLineF *lines, int lineCount)

Рисует первые lineCount линий в массиве lines с помощью текущей кисти.

См. также drawLine() и drawPolyline().

void QPainter::drawLines(const QList<QLineF> &lines)

Это перегруженный метод.

Рисует набор линий, определённых списком lines с помощью текущей кисти и заливки.

void QPainter::drawLines(const QPointF *pointPairs, int lineCount)

Это перегруженный метод.

Рисует первые lineCount линий в массиве pointPairs с помощью текущей кисти. Линии задаются парами точек, поэтому количество элементов в pointPairs должно быть не менее lineCount * 2.

void QPainter::drawLines(const QList<QPointF> &pointPairs)

Это перегруженный метод.

Рисует линию для каждой пары точек в векторе pointPairs с помощью текущей кисти. Если в массиве нечётное число точек, последняя точка игнорируется.

void QPainter::drawLines(const QLine *lines, int lineCount)

Это перегруженный метод.

Рисует первые lineCount линий в массиве lines с помощью текущей кисти.

void QPainter::drawLines(const QList<QLine> &lines)

Это перегруженный метод.

Рисует множество линий, определённых списком lines, используя текущую кисть и заливку.

void QPainter::drawLines(const QPoint *pointPairs, int lineCount)

Это перегруженный метод.

Рисует первые lineCount линий в массиве pointPairs с помощью текущей кисти.

void QPainter::drawLines(const QList<QPoint> &pointPairs)

Это перегруженный метод.

Рисует линию для каждой пары точек в векторе pointPairs, используя текущую кисть.

void QPainter::drawPath(const QPainterPath &path)

Рисует заданный путь path, используя текущую кисть для контура и текущую заливку для заливки.

QPainterPath path;
path.moveTo(20, 80);
path.lineTo(20, 30);
path.cubicTo(80, 0, 50, 50, 80, 80);

QPainter painter(this);
painter.drawPath(path);

См. также пример Painter Paths и пример Vector Deformation.

void QPainter::drawPicture(const QPointF &point, const QPicture &picture)

Воспроизводит заданную picture в заданной точке.

Класс QPicture — это устройство рисования, которое записывает и воспроизводит команды QPainter. Рисунок сериализует команды рисования в устройство ввода-вывода в платформенно-независимом формате. Всё, что можно нарисовать на виджете или растровом изображении, также может быть сохранено в рисунке.

Эта функция делает точно то же, что и QPicture::play() при вызове с point = QPoint(0, 0).

QPicture picture;
QPointF point(10.0, 20.0);
picture.load("drawing.pic");

QPainter painter(this);
painter.drawPicture(0, 0, picture);

См. также QPicture::play().

void QPainter::drawPicture(int x, int y, const QPicture &picture)

Это перегруженный метод.

Рисует заданный рисунок в точке (x, y).

void QPainter::drawPicture(const QPoint &point, const QPicture &picture)

Это перегруженный метод.

Воспроизводит заданный рисунок в заданной точке.

void QPainter::drawPie(const QRectF &rectangle, int startAngle, int spanAngle)

Рисует сектор, определяемый заданным прямоугольником, углом начала и углом охвата.

Сектор заполняется текущей заливкой.

Угол начала и угол охвата должны быть указаны в 1/16-й градусе, т. е. полный круг равен 5760 (16 * 360). Положительные значения углов означают против часовой стрелки, а отрицательные — по часовой стрелке. Ноль градусов находится в положении «3 часа».

QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;

QPainter painter(this);
painter.drawPie(rectangle, startAngle, spanAngle);

См. также drawEllipse(), drawChord() и Систему координат.

void QPainter::drawPie(int x, int y, int width, int height, int startAngle, int spanAngle)

Это перегруженный метод.

Рисует сектор, определяемый прямоугольником, начинающимся в точке (x, y), со заданной шириной и высотой, и указанным углом начала и углом охвата.

void QPainter::drawPie(const QRect &rectangle, int startAngle, int spanAngle)

Это перегруженный метод.

Рисует сектор, определяемый заданным прямоугольником, углом начала и углом охвата.

void QPainter::drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)

Рисует прямоугольную часть source заданного pixmap в заданную область в устройстве рисования.

Примечание: pixmap масштабируется для соответствия прямоугольнику, если размеры обоих объектов не совпадают.

Примечание: См. Рисование высококачественных версий pixmap и изображений о том, как это влияет на QPixmap::devicePixelRatio().

QRectF target(10.0, 20.0, 80.0, 60.0);
QRectF source(0.0, 0.0, 70.0, 40.0);
QPixmap pixmap(":myPixmap.png");

QPainter(this);
painter.drawPixmap(target, pixmap, source);

Если pixmap является QBitmap, он рисуется с битами, которые «установлены» с использованием цвета кисти. Если backgroundMode равен Qt::OpaqueMode, «неустановленные» биты рисуются с цветом кисти фона; если backgroundMode равен Qt::TransparentMode, «неустановленные» биты прозрачны. Рисование растровых изображений с градиентами или текстурными цветами не поддерживается.

См. также drawImage() и QPixmap::devicePixelRatio().

void QPainter::drawPixmap(const QRect &target, const QPixmap &pixmap, const QRect &source)

Это перегруженный метод.

Рисует прямоугольную часть source заданного pixmap в заданную область в устройстве рисования.

Примечание: pixmap масштабируется для соответствия прямоугольнику, если размеры обоих объектов не совпадают.

void QPainter::drawPixmap(int x, int y, int w, int h, const QPixmap &pixmap, int sx, int sy, int sw, int sh)

Это перегруженный метод.

Рисует прямоугольную часть с началом (sx, sy), шириной sw и высотой sh заданного pixmap в точке (x, y) с шириной w и высотой h. Если sw или sh равны нулю, используется ширина/высота pixmap и корректируется смещением sx/sy;

void QPainter::drawPixmap(int x, int y, const QPixmap &pixmap, int sx, int sy, int sw, int sh)

Это перегруженный метод.

Рисует pixmap в точке (x, y), копируя часть заданного pixmap в устройство рисования.

(x, y) задаёт верхнюю левую точку в устройстве рисования, на которую будет нарисовано изображение. (sx, sy) задаёт верхнюю левую точку в pixmap, которая будет нарисована. По умолчанию (0, 0).

(sw, sh) задаёт размер pixmap, который будет нарисован. По умолчанию (0, 0) (и отрицательные значения) означает всю область до нижнего правого угла pixmap.

void QPainter::drawPixmap(const QPointF &point, const QPixmap &pixmap, const QRectF &source)

Это перегруженный метод.

Рисует прямоугольную часть source заданного pixmap с началом в заданной точке.

void QPainter::drawPixmap(const QPoint &point, const QPixmap &pixmap, const QRect &source)

Это перегруженный метод.

Рисует прямоугольную часть source заданного pixmap с началом в заданной точке.

void QPainter::drawPixmap(const QPointF &point, const QPixmap &pixmap)

Это перегруженный метод.

Рисует заданный pixmap с началом в заданной точке.

void QPainter::drawPixmap(const QPoint &point, const QPixmap &pixmap)

Это перегруженный метод.

Рисует заданный pixmap с началом в заданной точке.

void QPainter::drawPixmap(int x, int y, const QPixmap &pixmap)

Это перегруженный метод.

Рисует заданный pixmap в позиции (x, y).

void QPainter::drawPixmap(const QRect &rectangle, const QPixmap &pixmap)

Это перегруженный метод.

Рисует заданный pixmap в заданный прямоугольник.

Примечание: Pixmap масштабируется для соответствия прямоугольнику, если размеры pixmap и прямоугольника не совпадают.

void QPainter::drawPixmap(int x, int y, int width, int height, const QPixmap &pixmap)

Это перегруженный метод.

Рисует pixmap в прямоугольник в позиции (x, y) с заданной шириной и высотой.

void QPainter::drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, QPainter::PixmapFragmentHints hints = PixmapFragmentHints())

Этот метод используется для рисования pixmap или подпрямоугольника pixmap в нескольких позициях с различным масштабом, поворотом и непрозрачностью. fragments — массив из fragmentCount элементов, определяющих параметры для рисования каждого фрагмента pixmap. Параметр hints может использоваться для передачи подсказок для рисования.

Этот метод потенциально быстрее, чем несколько вызовов drawPixmap(), так как ядро может оптимизировать изменения состояния.

См. также QPainter::PixmapFragment и QPainter::PixmapFragmentHint.

void QPainter::drawPoint(const QPointF &position)

Рисует одну точку в заданной позиции, используя цвет текущей кисти.

См. также Система координат.

void QPainter::drawPoint(const QPoint &position)

Это перегруженный метод.

Рисует одну точку в заданной позиции, используя цвет текущей кисти.

void QPainter::drawPoint(int x, int y)

Это перегруженный метод.

Рисует одну точку в позиции (x, y).

void QPainter::drawPoints(const QPointF *points, int pointCount)

Рисует первые pointCount точек в массиве points, используя цвет текущей кисти.

См. также Система координат.

void QPainter::drawPoints(const QPolygonF &points)

Это перегруженный метод.

Рисует точки в векторе points.

void QPainter::drawPoints(const QPoint *points, int pointCount)

Это перегруженный метод.

Рисует первые pointCount точек в массиве points, используя цвет текущей кисти.

void QPainter::drawPoints(const QPolygon &points)

Это перегруженный метод.

Рисует точки в векторе points.

void QPainter::drawPolygon(const QPointF *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)

Рисует многоугольник, определенный первыми pointCount точками в массиве points, используя текущую кисть и заливку.

static const QPointF points[4] = {
    QPointF(10.0, 80.0),
    QPointF(20.0, 10.0),
    QPointF(80.0, 30.0),
    QPointF(90.0, 70.0)
};

QPainter painter(this);
painter.drawPolygon(points, 4);

Первая точка неявно соединяется с последней, и многоугольник заполняется текущей заливкой().

Если fillRule равен Qt::WindingFill, многоугольник заполняется алгоритмом заполнения по обходу. Если fillRule равен Qt::OddEvenFill, многоугольник заполняется алгоритмом заполнения чёт-нечёт. См. Qt::FillRule для более подробного описания этих правил заполнения.

См. также drawConvexPolygon(), drawPolyline(), и Система координат.

void QPainter::drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill)

Это перегруженный метод.

Рисует многоугольник, определенный заданными points, используя правило заполнения fillRule.

void QPainter::drawPolygon(const QPoint *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)

Это перегруженный метод.

Рисует многоугольник, определенный первыми pointCount точками в массиве points.

void QPainter::drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill)

Это перегруженный метод.

Рисует многоугольник, определенный заданными points, используя правило заполнения fillRule.

void QPainter::drawPolyline(const QPointF *points, int pointCount)

Рисует ломаную линию, определенную первыми pointCount точками в points, используя текущую кисть.

Обратите внимание, что в отличие от функции drawPolygon(), последняя точка не соединяется с первой, и ломаная линия не закрашивается.

static const QPointF points[3] = {
    QPointF(10.0, 80.0),
    QPointF(20.0, 10.0),
    QPointF(80.0, 30.0),
};

QPainter painter(this);
painter.drawPolyline(points, 3);

См. также drawLines(), drawPolygon(), и Система координат.

void QPainter::drawPolyline(const QPolygonF &points)

Это перегруженный метод.

Рисует ломаную линию, определенную заданными points, используя текущую кисть.

void QPainter::drawPolyline(const QPoint *points, int pointCount)

Это перегруженный метод.

Рисует ломаную линию, определенную первыми pointCount точками в points, используя текущую кисть.

void QPainter::drawPolyline(const QPolygon &points)

Это перегруженный метод.

Рисует ломаную линию, определенную заданными points, используя текущую кисть.

void QPainter::drawRect(const QRectF &rectangle)

Рисует текущий прямоугольник с текущей кистью и заливкой.

Заполненный прямоугольник имеет размер rectangle.size(). Отображаемый прямоугольник имеет размер rectangle.size() плюс толщина кисти.

QRectF rectangle(10.0, 20.0, 80.0, 60.0);

QPainter painter(this);
painter.drawRect(rectangle);

См. также drawRects(), drawPolygon(), и Система координат.

void QPainter::drawRect(int x, int y, int width, int height)

Это перегруженный метод.

Рисует прямоугольник с верхним левым углом в (x, y) и заданной шириной и высотой.

void QPainter::drawRect(const QRect &rectangle)

Это перегруженный метод.

Рисует текущий прямоугольник с текущей кистью и заливкой.

void QPainter::drawRects(const QRectF *rectangles, int rectCount)

Рисует первые rectCount заданных rectangles, используя текущую кисть и заливку.

См. также drawRect().

void QPainter::drawRects(const QList<QRectF> &rectangles)

Это перегруженный метод.

Рисует заданные rectangles, используя текущую кисть и заливку.

END_OF_DOCUMENT_MARKER

void QPainter::drawRects(const QRect *rectangles, int rectCount)

Это перегруженный метод.

Рисует первые rectCount прямоугольников из заданного массива rectangles, используя текущую ручку и кисть.

void QPainter::drawRects(const QList<QRect> &rectangles)

Это перегруженный метод.

Рисует заданные прямоугольники rectangles, используя текущую ручку и кисть.

void QPainter::drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)

Рисует заданный прямоугольник rect с закруглёнными углами.

Аргументы xRadius и yRadius задают радиусы эллипсов, определяющих углы закруглённого прямоугольника. Когда mode равен Qt::RelativeSize, xRadius и yRadius задаются в процентах от половины ширины и высоты прямоугольника соответственно и должны находиться в диапазоне от 0,0 до 100,0.

Размер заполненного прямоугольника равен rect.size(). Размер очерченного прямоугольника равен rect.size() плюс ширина ручки.

QRectF rectangle(10.0, 20.0, 80.0, 60.0);

QPainter painter(this);
painter.drawRoundedRect(rectangle, 20.0, 15.0);

См. также drawRect() и QPen.

void QPainter::drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)

Это перегруженный метод.

Рисует заданный прямоугольник x, y, w, h с закруглёнными углами.

void QPainter::drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)

Это перегруженный метод.

Рисует заданный прямоугольник rect с закруглёнными углами.

void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText &staticText)

Рисует заданный текст staticText в заданной точке topLeftPosition.

Текст будет нарисован с использованием шрифта и преобразования, установленных в рисовальщике. Если шрифт и/или преобразование, установленные в рисовальщике, отличаются от тех, которые использовались для инициализации макета QStaticText, то макет придётся пересчитать. Используйте QStaticText::prepare(), чтобы инициализировать staticText шрифтом и преобразованием, с помощью которых он будет позже нарисован.

Если topLeftPosition не совпадает с тем, что было при инициализации staticText или последнем рисовании, то при перемещении текста в новое положение будет небольшая накладная стоимость.

Примечание: Если преобразование рисовальщика не является аффинным, то staticText будет нарисован с помощью обычных вызовов drawText(), теряя любой потенциальный выигрыш в производительности.

Примечание: Значение y используется как верхняя позиция шрифта.

См. также QStaticText.

void QPainter::drawStaticText(const QPoint &topLeftPosition, const QStaticText &staticText)

Это перегруженный метод.

Рисует staticText в точке topLeftPosition.

Примечание: Значение y используется как верхняя позиция шрифта.

void QPainter::drawStaticText(int left, int top, const QStaticText &staticText)

Это перегруженный метод.

Рисует staticText в координатах left и top.

Примечание: Значение y используется как верхняя позиция шрифта.

void QPainter::drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)

Это перегруженный метод.

Рисует заданный текст text внутри заданного прямоугольника rectangle. Прямоугольник вместе с флагами выравнивания flags определяет якоря для text.

QPainter painter(this);
painter.drawText(rect, Qt::AlignCenter, tr("Qt\nProject"));

Прямоугольник boundingRect (если не nullptr) устанавливается в значение, которое должно охватывать весь текст. Например, на следующем изображении пунктирная линия представляет boundingRect, рассчитанный функцией, а штриховая линия — rectangle:

QPainter painter(this);
QFont font = painter.font();
font.setPixelSize(48);
painter.setFont(font);

const QRect rectangle = QRect(0, 0, 100, 50);
QRect boundingRect;
painter.drawText(rectangle, 0, tr("Hello"), &boundingRect);

QPen pen = painter.pen();
pen.setStyle(Qt::DotLine);
painter.setPen(pen);
painter.drawRect(boundingRect.adjusted(0, 0, -pen.width(), -pen.width()));

pen.setStyle(Qt::DashLine);
painter.setPen(pen);
painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()));

Аргумент flags является битовым ИЛИ следующих флагов:

  • Qt::AlignLeft
  • Qt::AlignRight
  • Qt::AlignHCenter
  • Qt::AlignJustify
  • Qt::AlignTop
  • Qt::AlignBottom
  • Qt::AlignVCenter
  • Qt::AlignCenter
  • Qt::TextDontClip
  • Qt::TextSingleLine
  • Qt::TextExpandTabs
  • Qt::TextShowMnemonic
  • Qt::TextWordWrap
  • Qt::TextIncludeTrailingSpaces

По умолчанию QPainter рисует текст с антиалиасингом.

Примечание: Координата y прямоугольника rectangle используется как верхняя позиция шрифта.

См. также Qt::AlignmentFlag, Qt::TextFlag, boundingRect() и layoutDirection().

void QPainter::drawText(const QPointF &position, const QString &text)

Рисует заданный текст text с текущим направлением текста, начиная с заданной позиции position.

Эта функция не обрабатывает символ новой строки (\n), так как не может разбить текст на несколько строк и не может отобразить символ новой строки. Используйте перегрузку QPainter::drawText(), принимающую прямоугольник, если вы хотите нарисовать несколько строк текста с символом новой строки или если вы хотите переносить текст.

По умолчанию QPainter рисует текст с антиалиасингом.

Примечание: Позиция y используется как базовое значение шрифта.

См. также setFont() и setPen().

void QPainter::drawText(const QPoint &position, const QString &text)

Это перегруженный метод.

Рисует заданный текст text с текущим направлением текста, начиная с заданной позиции position.

По умолчанию QPainter рисует текст с антиалиасингом.

Примечание: Позиция y используется как базовое значение шрифта.

См. также setFont() и setPen().

void QPainter::drawText(int x, int y, const QString &text)

Это перегруженный метод.

Рисует заданный текст text в позиции (x, y), используя текущее направление текста рисовальщика.

По умолчанию QPainter рисует текст с антиалиасингом.

Примечание: Позиция y используется как базовое значение шрифта.

См. также setFont() и setPen().

void QPainter::drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect = nullptr)

Это перегруженный метод.

Рисует заданный текст text внутри заданного прямоугольника rectangle в соответствии с указанными флагами flags.

Прямоугольник boundingRect (если не nullptr) устанавливается в значение, которое должно охватывать весь текст. Например, на следующем изображении пунктирная линия представляет boundingRect, рассчитанный функцией, а штриховая линия — rectangle:

QPainter painter(this);
QFont font = painter.font();
font.setPixelSize(48);
painter.setFont(font);

const QRect rectangle = QRect(0, 0, 100, 50);
QRect boundingRect;
painter.drawText(rectangle, 0, tr("Hello"), &boundingRect);

QPen pen = painter.pen();
pen.setStyle(Qt::DotLine);
painter.setPen(pen);
painter.drawRect(boundingRect.adjusted(0, 0, -pen.width(), -pen.width()));

pen.setStyle(Qt::DashLine);
painter.setPen(pen);
painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()));

По умолчанию QPainter рисует текст с антиалиасингом.

Примечание: Координата y прямоугольника rectangle используется как верхняя позиция шрифта.

См. также setFont() и setPen().

void QPainter::drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect = nullptr)

Это перегруженный метод.

Рисует заданный текст text внутри прямоугольника с началом в точке (x, y), шириной width и высотой height.

boundingRect (если не null) устанавливается в прямоугольник, который должен охватывать весь текст. Например, на следующем изображении пунктирная линия представляет boundingRect, рассчитанный функцией, а штриховая линия представляет прямоугольник, заданный значениями x, y, width и height:

QPainter painter(this);
QFont font = painter.font();
font.setPixelSize(48);
painter.setFont(font);

const QRect rectangle = QRect(0, 0, 100, 50);
QRect boundingRect;
painter.drawText(rectangle, 0, tr("Hello"), &boundingRect);

QPen pen = painter.pen();
pen.setStyle(Qt::DotLine);
painter.setPen(pen);
painter.drawRect(boundingRect.adjusted(0, 0, -pen.width(), -pen.width()));

pen.setStyle(Qt::DashLine);
painter.setPen(pen);
painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()));

Аргумент flags — битовое ИЛИ следующих флагов:

  • Qt::AlignLeft
  • Qt::AlignRight
  • Qt::AlignHCenter
  • Qt::AlignJustify
  • Qt::AlignTop
  • Qt::AlignBottom
  • Qt::AlignVCenter
  • Qt::AlignCenter
  • Qt::TextSingleLine
  • Qt::TextExpandTabs
  • Qt::TextShowMnemonic
  • Qt::TextWordWrap

По умолчанию, QPainter рисует текст с антиалиасингом.

Примечание: Координата y используется как верхняя граница шрифта.

См. также Qt::AlignmentFlag, Qt::TextFlag, setFont() и setPen().

void QPainter::drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())

Это перегруженный метод.

Рисует заданный текст text в заданном прямоугольнике rectangle, используя параметры option для управления его позицией, направлением и ориентацией. Параметры, заданные в option, переопределяют параметры, заданные на объекте QPainter.

По умолчанию, QPainter рисует текст с антиалиасингом.

Примечание: Координата y прямоугольника rectangle используется как верхняя граница шрифта.

См. также setFont() и setPen().

void QPainter::drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &position = QPointF())

Рисует плитку pixmap внутри заданного прямоугольника rectangle с началом в заданной точке position.

Вызов drawTiledPixmap() аналогичен вызову drawPixmap() несколько раз для заполнения области плиткой pixmap, но потенциально может быть намного эффективнее в зависимости от используемой системы окон.

drawTiledPixmap() создаст одинаковый визуальный узор плитки на дисплеях с высоким разрешением (с devicePixelRatio > 1), по сравнению с дисплеями стандартного разрешения. Установите devicePixelRatio для pixmap для управления размером плитки. Например, установка его в значение 2 уменьшит ширину и высоту плитки в два раза (как на 1x, так и на 2x дисплеях) и создаст вывод высокого разрешения на 2x дисплеях.

Смещение position всегда указывается в системе координат painter, независимо от devicePixelRatio дисплея.

См. также drawPixmap().

void QPainter::drawTiledPixmap(int x, int y, int width, int height, const QPixmap &pixmap, int sx = 0, int sy = 0)

Это перегруженный метод.

Рисует плитку pixmap в указанном прямоугольнике.

(x, y) задаёт верхнюю левую точку в устройстве рисования, на которое будет нарисована плитка; с заданной width и height. (sx, sy) задаёт верхнюю левую точку в pixmap, которая будет нарисована; по умолчанию (0, 0).

void QPainter::drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &position = QPoint())

Это перегруженный метод.

Рисует плитку pixmap внутри заданного прямоугольника rectangle с началом в заданной точке position.

bool QPainter::end()

Завершает рисование. Все ресурсы, используемые во время рисования, освобождаются. Обычно вызывать не нужно, так как это делается деструктором.

Возвращает true если рисовальщик больше не активен; иначе возвращает false.

См. также begin() и isActive().

void QPainter::endNativePainting()

Восстанавливает рисовальщик после ручного выполнения команд рисования низкого уровня. Позволяет рисовальщику восстановить любые внутренние состояния, на которые он полагается, прежде чем вызывать другие команды рисовальщика.

См. также beginNativePainting().

void QPainter::eraseRect(const QRectF &rectangle)

Очищает область внутри заданного прямоугольника rectangle. Эквивалентно вызову

fillRect(rectangle, background());

См. также fillRect().

void QPainter::eraseRect(int x, int y, int width, int height)

Это перегруженный метод.

Очищает область внутри прямоугольника, начинающегося в точке (x, y) с заданной width и height.

void QPainter::eraseRect(const QRect &rectangle)

Это перегруженный метод.

Очищает область внутри заданного прямоугольника rectangle.

void QPainter::fillPath(const QPainterPath &path, const QBrush &brush)

Заполняет заданный путь path заданной кистью brush. Контур не рисуется.

В качестве альтернативы, можно указать QColor вместо QBrush; конструктор QBrush (принимающий аргумент QColor) автоматически создаст кисть сплошного цвета.

См. также drawPath().

void QPainter::fillRect(const QRectF &rectangle, const QBrush &brush)

Заполняет заданный прямоугольник rectangle заданной кистью brush.

В качестве альтернативы, можно указать QColor вместо QBrush; конструктор QBrush (принимающий аргумент QColor) автоматически создаст кисть сплошного цвета.

См. также drawRect().

void QPainter::fillRect(int x, int y, int width, int height, const QBrush &brush)

Это перегруженный метод.

Заполняет прямоугольник, начинающийся в точке (x, y) с заданной width и height, используя заданную кисть brush.

void QPainter::fillRect(const QRect &rectangle, const QBrush &brush)

Это перегруженный метод.

Заполняет заданный прямоугольник rectangle заданной кистью.

void QPainter::fillRect(const QRectF &rectangle, const QColor &color)

Это перегруженный метод.

Заполняет заданный прямоугольник rectangle заданным цветом.

void QPainter::fillRect(int x, int y, int width, int height, const QColor &color)

Это перегруженный метод.

Заполняет прямоугольник, начинающийся в точке (x, y) с заданной width и height, заданным цветом.

void QPainter::fillRect(const QRect &rectangle, const QColor &color)

Это перегруженный метод.

Заполняет заданный прямоугольник rectangle заданным цветом.

void QPainter::fillRect(int x, int y, int width, int height, Qt::GlobalColor color)

Это перегруженный метод.

Заполняет прямоугольник, начинающийся в точке (x, y) заданной шириной и высотой, используя заданный цвет.

void QPainter::fillRect(const QRect &rectangle, Qt::GlobalColor color)

Это перегруженный метод.

Заполняет заданный прямоугольник указанным цветом.

void QPainter::fillRect(const QRectF &rectangle, Qt::GlobalColor color)

Это перегруженный метод.

Заполняет заданный прямоугольник указанным цветом.

void QPainter::fillRect(int x, int y, int width, int height, Qt::BrushStyle style)

Это перегруженный метод.

Заполняет прямоугольник, начинающийся в точке (x, y) заданной шириной и высотой, используя указанный стиль кисти style.

void QPainter::fillRect(const QRect &rectangle, Qt::BrushStyle style)

Это перегруженный метод.

Заполняет заданный прямоугольник указанным стилем кисти.

void QPainter::fillRect(const QRectF &rectangle, Qt::BrushStyle style)

Это перегруженный метод.

Заполняет заданный прямоугольник указанным стилем кисти.

[since 5.12] void QPainter::fillRect(int x, int y, int width, int height, QGradient::Preset preset)

Это перегруженный метод.

Заполняет прямоугольник, начинающийся в точке (x, y) заданной шириной и высотой, используя заданный вид градиента preset.

Данная функция была добавлена в Qt 5.12.

[since 5.12] void QPainter::fillRect(const QRect &rectangle, QGradient::Preset preset)

Это перегруженный метод.

Заполняет заданный прямоугольник указанным видом градиента preset.

Данная функция была добавлена в Qt 5.12.

[since 5.12] void QPainter::fillRect(const QRectF &rectangle, QGradient::Preset preset)

Это перегруженный метод.

Заполняет заданный прямоугольник указанным видом градиента preset.

Данная функция была добавлена в Qt 5.12.

const QFont &QPainter::font() const

Возвращает текущий шрифт, используемый для отрисовки текста.

См. также setFont(), drawText() и Настройки.

QFontInfo QPainter::fontInfo() const

Возвращает информацию о шрифте для отрисовщика, если отрисовщик активен. В противном случае возвращаемое значение неопределённо.

См. также font(), isActive() и Настройки.

QFontMetrics QPainter::fontMetrics() const

Возвращает метрики шрифта для отрисовщика, если отрисовщик активен. В противном случае возвращаемое значение неопределённо.

См. также font(), isActive() и Настройки.

bool QPainter::hasClipping() const

Возвращает true если обрезка установлена; в противном случае возвращает false.

См. также setClipping() и Обрезка.

bool QPainter::isActive() const

Возвращает true если begin() был вызван, а end() ещё не был вызван; в противном случае возвращает false.

См. также begin() и QPaintDevice::paintingActive().

Qt::LayoutDirection QPainter::layoutDirection() const

Возвращает направление компоновки, используемое отрисовщиком при отрисовке текста.

См. также QTextOption::textDirection(), setLayoutDirection(), drawText() и Настройки.

qreal QPainter::opacity() const

Возвращает непрозрачность отрисовщика. Значение по умолчанию равно 1.

См. также setOpacity().

QPaintEngine *QPainter::paintEngine() const

Возвращает движок отрисовки, на котором в данный момент работает отрисовщик, если отрисовщик активен; в противном случае 0.

См. также isActive().

const QPen &QPainter::pen() const

Возвращает текущую кисть отрисовщика.

См. также setPen() и Настройки.

QPainter::RenderHints QPainter::renderHints() const

Возвращает флаг, определяющий настройки качества отрисовки, установленные для данного отрисовщика.

См. также setRenderHints(), testRenderHint() и Качество отрисовки.

void QPainter::resetTransform()

Сбрасывает все преобразования, произведённые с помощью translate(), scale(), shear(), rotate(), setWorldTransform(), setViewport() и setWindow().

См. также Преобразования координат.

void QPainter::restore()

Восстанавливает текущее состояние отрисовщика (выталкивает сохранённое состояние из стека).

См. также save().

void QPainter::rotate(qreal angle)

Поворачивает систему координат по часовой стрелке. Переданный параметр angle задаётся в градусах.

См. также setWorldTransform() и Преобразования координат.

void QPainter::save()

Сохраняет текущее состояние отрисовщика (помещает состояние на стек). save() должен быть последован соответствующим restore(); функция end() снимает со стека.

См. также restore().

void QPainter::scale(qreal sx, qreal sy)

Масштабирует систему координат на (sx, sy).

См. также setWorldTransform() и Преобразования координат.

void QPainter::setBackground(const QBrush &brush)

Устанавливает кисть фона отрисовщика на заданную brush.

Кисть фона — это кисть, которая заполняется при отрисовке непрозрачного текста, пунктирных линий и растровых изображений. Кисть фона не оказывает никакого влияния в режиме прозрачного фона (по умолчанию).

См. также background(), setBackgroundMode() и Настройки.

void QPainter::setBackgroundMode(Qt::BGMode mode)

Устанавливает режим фона отрисовщика на заданный mode.

Qt::TransparentMode (по умолчанию) рисует пунктирные линии и текст без установки пикселей фона. Qt::OpaqueMode заполняет эти области текущим цветом фона.

Обратите внимание, что для прозрачной отрисовки растрового изображения или пиксельного изображения необходимо использовать QPixmap::setMask().

См. также backgroundMode(), setBackground() и Настройки.

void QPainter::setBrush(const QBrush &brush)

Устанавливает кисть отрисовщика на заданную brush.

Кисть отрисовщика определяет, как заполняются фигуры.

См. также brush() и Настройки.

END_OF_DOCUMENT_MARKER

void QPainter::setBrush(Qt::BrushStyle style)

Это перегруженный метод.

Устанавливает кисть рисовальщика на чёрный цвет и указанный стиль style.

void QPainter::setBrushOrigin(const QPointF &position)

Устанавливает начало кисти в position.

Начало кисти определяет координаты (0, 0) кисти рисовальщика.

Обратите внимание, что хотя brushOrigin() была необходима для адаптации фона родительского виджета в Qt 3, это больше не так, поскольку рисовальщик Qt 4 не рисует фон, если вы явно не укажете это, установив свойство виджета autoFillBackground в значение true.

См. также brushOrigin() и Settings.

void QPainter::setBrushOrigin(int x, int y)

Это перегруженный метод.

Устанавливает начало кисти в точку (x, y).

void QPainter::setBrushOrigin(const QPoint &position)

Это перегруженный метод.

Устанавливает начало кисти в заданную position.

void QPainter::setClipPath(const QPainterPath &path, Qt::ClipOperation operation = Qt::ReplaceClip)

Включает обрезку и устанавливает траекторию обрезки рисовальщика на заданную path с заданной операцией обрезки operation.

Обратите внимание, что траектория обрезки задаётся в логических (рисовальщика) координатах.

См. также clipPath(), clipRegion() и Обрезка.

void QPainter::setClipRect(const QRectF &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)

Включает обрезку и устанавливает область обрезки на заданный прямоугольник rectangle с использованием заданной операции обрезки operation. По умолчанию операция — замена текущего прямоугольника обрезки.

Обратите внимание, что прямоугольник обрезки задаётся в логических (рисовальщика) координатах.

См. также clipRegion(), setClipping() и Обрезка.

void QPainter::setClipRect(const QRect &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)

Это перегруженный метод.

Включает обрезку и устанавливает область обрезки на заданный прямоугольник rectangle с использованием заданной операции обрезки.

void QPainter::setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation = Qt::ReplaceClip)

Включает обрезку и устанавливает область обрезки на прямоугольник, начинающийся в точке (x, y) с заданной шириной и высотой.

void QPainter::setClipRegion(const QRegion &region, Qt::ClipOperation operation = Qt::ReplaceClip)

Устанавливает область обрезки на заданную region с использованием заданной операции обрезки operation. По умолчанию операция обрезки — замена текущей области обрезки.

Обратите внимание, что область обрезки задаётся в логических координатах.

См. также clipRegion(), setClipRect() и Обрезка.

void QPainter::setClipping(bool enable)

Включает обрезку, если enable равно true, или отключает обрезку, если enable равно false.

См. также hasClipping() и Обрезка.

void QPainter::setCompositionMode(QPainter::CompositionMode mode)

Устанавливает режим композиции на заданный mode.

Предупреждение: Только QPainter, работающий с QImage, полностью поддерживает все режимы композиции. Режимы RasterOp поддерживаются для X11, как описано в compositionMode().

См. также compositionMode().

void QPainter::setFont(const QFont &font)

Устанавливает шрифт рисовальщика на заданный font.

Этот шрифт используется последующими функциями drawText(). Цвет текста — тот же, что и цвет пера.

Если вы зададите шрифт, которого нет, Qt найдёт близкий аналог. font() вернёт то, что вы задали с помощью setFont(), а fontInfo() вернёт фактически используемый шрифт (который может быть тем же самым).

См. также font(), drawText() и Settings.

void QPainter::setLayoutDirection(Qt::LayoutDirection direction)

Устанавливает направление макета, используемое рисовальщиком при рисовании текста, на указанное direction.

По умолчанию используется Qt::LayoutDirectionAuto, который неявно определяет направление из нарисованного текста.

См. также QTextOption::setTextDirection(), layoutDirection(), drawText() и Settings.

void QPainter::setOpacity(qreal opacity)

Устанавливает непрозрачность рисовальщика на opacity. Значение должно находиться в диапазоне от 0,0 до 1,0, где 0,0 — полностью прозрачно, а 1,0 — полностью непрозрачно.

Непрозрачность, установленная для рисовальщика, применяется к каждой операции рисования индивидуально.

См. также opacity().

void QPainter::setPen(const QPen &pen)

Устанавливает перо рисовальщика на заданное pen.

pen определяет, как рисовать линии и контуры, а также цвет текста.

См. также pen() и Settings.

void QPainter::setPen(const QColor &color)

Это перегруженный метод.

Устанавливает перо рисовальщика со стилем Qt::SolidLine, шириной 1 и заданным цветом color.

void QPainter::setPen(Qt::PenStyle style)

Это перегруженный метод.

Устанавливает перо рисовальщика с заданным style, шириной 1 и чёрным цветом.

void QPainter::setRenderHint(QPainter::RenderHint hint, bool on = true)

Включает заданный параметр рендеринга hint для рисовальщика, если on равно true; в противном случае очищает параметр рендеринга.

См. также setRenderHints(), renderHints() и Качество рендеринга.

void QPainter::setRenderHints(QPainter::RenderHints hints, bool on = true)

Включает заданные параметры рендеринга hints для рисовальщика, если on равно true; в противном случае очищает параметры рендеринга.

См. также setRenderHint(), renderHints() и Качество рендеринга.

void QPainter::setTransform(const QTransform &transform, bool combine = false)

Устанавливает матрицу преобразования мира. Если combine равно true, указанное transform комбинируется с текущей матрицей; в противном случае оно заменяет текущую матрицу.

См. также transform() и setWorldTransform().

void QPainter::setViewTransformEnabled(bool enable)

Включает преобразования представления, если enable равно true, или отключает преобразования представления, если enable равно false.

См. также viewTransformEnabled() и Преобразование окно-порт.

void QPainter::setViewport(const QRect &rectangle)

Устанавливает прямоугольник области просмотра рисовальщика на заданный rectangle и включает преобразования представления.

Прямоугольник области просмотра является частью преобразования представления. Область просмотра определяет систему координат устройства. Её «сестра», window(), определяет логическую систему координат.

По умолчанию прямоугольник области просмотра совпадает с прямоугольником устройства.

См. также viewport(), viewTransformEnabled() и Преобразование окно-видовое порт.

void QPainter::setViewport(int x, int y, int width, int height)

Это перегруженный метод.

Устанавливает прямоугольник области просмотра рисовальщика в прямоугольник, начинающийся в точке (x, y) с заданной width и height.

void QPainter::setWindow(const QRect &rectangle)

Устанавливает окно рисовальщика в заданный rectangle и включает преобразования.

Прямоугольник окна является частью преобразования просмотра. Окно определяет логическую систему координат. Его сестра, viewport(), определяет систему координат устройства.

По умолчанию прямоугольник окна совпадает с прямоугольником устройства.

См. также window(), viewTransformEnabled() и Преобразование окно-видовое порт.

void QPainter::setWindow(int x, int y, int width, int height)

Это перегруженный метод.

Устанавливает окно рисовальщика в прямоугольник, начинающийся в точке (x, y) и имеющий заданную width и height.

void QPainter::setWorldMatrixEnabled(bool enable)

Включает преобразования, если enable равно true, или отключает преобразования, если enable равно false. Матрица мирового преобразования не изменяется.

См. также worldMatrixEnabled(), worldTransform() и Преобразования координат.

void QPainter::setWorldTransform(const QTransform &matrix, bool combine = false)

Устанавливает матрицу мирового преобразования. Если combine равно true, заданная matrix комбинируется с текущей матрицей; в противном случае текущая матрица заменяется.

См. также worldTransform(), transform() и setTransform().

void QPainter::shear(qreal sh, qreal sv)

Деформирует систему координат на (sh, sv).

См. также setWorldTransform() и Преобразования координат.

void QPainter::strokePath(const QPainterPath &path, const QPen &pen)

Рисует контур (обводку) пути path с помощью пера, заданного pen.

См. также fillPath() и Рисование.

bool QPainter::testRenderHint(QPainter::RenderHint hint) const

Возвращает true, если hint установлен; в противном случае возвращает false.

См. также renderHints() и setRenderHint().

const QTransform &QPainter::transform() const

Псевдоним для worldTransform(). Возвращает матрицу мирового преобразования.

См. также setTransform() и worldTransform().

void QPainter::translate(const QPointF &offset)

Перемещает систему координат на заданный offset; то есть заданный offset добавляется к точкам.

См. также setWorldTransform() и Преобразования координат.

void QPainter::translate(const QPoint &offset)

Это перегруженный метод.

Перемещает систему координат на заданный offset.

void QPainter::translate(qreal dx, qreal dy)

Это перегруженный метод.

Перемещает систему координат на вектор (dx, dy).

bool QPainter::viewTransformEnabled() const

Возвращает true, если преобразование просмотра включено; в противном случае возвращает false.

См. также setViewTransformEnabled() и worldTransform().

QRect QPainter::viewport() const

Возвращает прямоугольник области просмотра.

См. также setViewport() и setViewTransformEnabled().

QRect QPainter::window() const

Возвращает прямоугольник окна.

См. также setWindow() и setViewTransformEnabled().

bool QPainter::worldMatrixEnabled() const

Возвращает true, если преобразование мира включено; в противном случае возвращает false.

См. также setWorldMatrixEnabled(), worldTransform() и Система координат.

const QTransform &QPainter::worldTransform() const

Возвращает матрицу мирового преобразования.

См. также setWorldTransform().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qpainter.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API