Spec-Zone.ru › Qt 5.9

Класс QPainter

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

Заголовок: #include <QPainter>
qmake: QT += gui
Наследуется от:

QStylePainter

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

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

Открытые типы

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

Открытые функции

QPainter()
QPainter(QPaintDevice *device)
~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
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 QVector<QLineF> &lines)
void drawLines(const QPointF *pointPairs, int lineCount)
END_OF_DOCUMENT_MARKER
void drawLines(const QVector<QPointF> &pointPairs)
void drawLines(const QLine *lines, int lineCount)
void drawLines(const QVector<QLine> &lines)
void drawLines(const QPoint *pointPairs, int lineCount)
void drawLines(const QVector<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 PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, 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 QVector<QRectF> &rectangles)
void drawRects(const QRect *rectangles, int rectCount)
void drawRects(const QVector<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)
void drawStaticText(const QPoint &topLeftPosition, const QStaticText &staticText)
void drawStaticText(int left, int top, const QStaticText &staticText)
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 QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = Q_NULLPTR)
void drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect = Q_NULLPTR)
void drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect = Q_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)
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
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(const QPoint &position)
void setBrushOrigin(int x, int y)
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(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(RenderHint hint, bool on = true)
void setRenderHints(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(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 предоставляет высокооптимизированные функции для большинства операций рисования, необходимых для графических программ. Он может рисовать все, от простых линий до сложных фигур, таких как сектора и хорды. Он также может рисовать выровненные тексты и пиксельмапы. Обычно он рисует в «естественной» системе координат, но также может выполнять преобразования вида и мира. 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(), которая стирает область внутри заданного прямоугольника.

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

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

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

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

Пример путей рисовальщика

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

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

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.

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

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

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

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

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

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

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

nop rotate() scale() translate()

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

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

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

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

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

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

При рисовании с помощью QPainter, мы указываем точки, используя логические координаты, которые затем преобразуются в физические координаты устройства отрисовки. Сопоставление логических координат с физическими координатами выполняется QPainter с помощью combinedTransform(), комбинацией 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%">
Пример режимов наложения

Пример Режим наложения, доступный в каталоге примеров 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.

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

class="valuelist">
Константа Значение Описание
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 Пиксель источника смешивается поверх пикселя назначения, при этом альфа пикселя источника уменьшается на альфу пикселя назначения.

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

enum QPainter::PixmapFragmentHintflags QPainter::PixmapFragmentHints

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

Этот перечисление был введён или изменён в Qt 4.7.

Тип PixmapFragmentHints — это typedef для 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::HighQualityAntialiasing 0x08 Это значение устарело и будет проигнорировано. Используйте вместо него параметр сглаживания RenderHint.
QPainter::NonCosmeticDefaultPen 0x10 Этот параметр устарел; по умолчанию для QPen теперь используется не декоративный режим.
QPainter::Qt4CompatiblePainting 0x20 Параметр совместимости, указывающий движку использовать те же правила заполнения, основанные на X11, что и в Qt 4, где сглаженное рендеринг смещается на чуть меньше половины пикселя. Также будет обрабатывать конструкторы по умолчанию для пера как декоративные. Может быть полезно при переносе приложения Qt 4 в Qt 5.

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

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

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

QPainter::QPainter()

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

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

QPainter::QPainter(QPaintDevice *device)

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

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

Вот пример, использующий begin() и end():

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

Тот же пример, используя этот конструктор:

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

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

См. также 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();

Эта функция была введена в Qt 4.6.

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

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

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

Если текст не помещается в заданный прямоугольник, используя указанные 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)

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

Возвращает ограничивающую прямоугольник заданного текста, как он будет отображаться при отрисовке внутри прямоугольника, начинающегося в точке (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

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

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

Эта функция была добавлена в Qt 4.8.

См. также 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().

CompositionMode QPainter::compositionMode() const

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

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

QPaintDevice *QPainter::device() const

Возвращает устройство рисования, на котором в данный момент рисует этот объект, или 0, если объект не активен.

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

const QTransform &QPainter::deviceTransform() const

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

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

Перечисление 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.

Этот метод был введён в Qt 4.4.

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

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

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

Этот метод был введён в Qt 4.4.

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

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

Этот метод был введён в Qt 4.8.

См. также 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 QVector<QLineF> &lines)

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

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

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

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

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

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

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

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

Если в массиве нечётное число точек, последняя точка игнорируется.

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

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

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

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

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

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

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

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

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

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

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

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

void QPainter::drawPath(const QPainterPath &path)

Рисует заданный объект QPainterPath 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 в заданной точке point.

Класс 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)

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

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

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

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

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

void QPainter::drawPie(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.drawPie(rectangle, startAngle, spanAngle);

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

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

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

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

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

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

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

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

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

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

Примечание: См. Рисование высокоразрешительных версий картинок и изображений о том, как это влияет на 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 в заданную target на устройстве рисования.

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

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 равны нулю, используется ширина/высота картинки и корректируется смещением sx/sy;

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

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

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

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

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

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

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

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

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

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

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

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 PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, PixmapFragmentHints hints = PixmapFragmentHints())

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

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

Этот метод был добавлен в Qt 4.7.

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

void QPainter::drawPoint(const QPointF &position)

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

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

void QPainter::drawPoint(const QPoint &position)

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

Рисует одну точку в заданной 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().

END_OF_DOCUMENT_MARKER

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

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

Рисует заданные rectangles с помощью текущей кисти и пера.

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

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

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

void QPainter::drawRects(const QVector<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);

Функция была добавлена в Qt 4.4.

См. также 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 со скругленными углами.

Функция была добавлена в Qt 4.4.

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

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

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

Функция была добавлена в Qt 4.4.

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

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

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

Если topLeftPosition не совпадает с теми, которые использовались при инициализации staticText или при последнем рисовании, то при переводе текста в новую позицию будет небольшой накладные расходы.

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

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

Функция была добавлена в Qt 4.7.

См. также QStaticText.

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

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

Рисует staticText в topLeftPosition.

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

Функция была добавлена в Qt 4.7.

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

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

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

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

Функция была добавлена в Qt 4.7.

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 QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = Q_NULLPTR)

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

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

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

boundingRect (если не null) устанавливается в прямоугольник, содержащий весь текст. Например, на картинке пунктирная линия представляет 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 QRect &rectangle, int flags, const QString &text, QRect *boundingRect = Q_NULLPTR)

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

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

Прямоугольник boundingRect (если он не равен null) устанавливается в значение, которое должен иметь ограничивающий прямоугольник для охватывания всего текста. Например, на следующем изображении пунктирная линия представляет 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 = Q_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 для управления его позиционированием и ориентацией.

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

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

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

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

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

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

См. также 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()

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

Эта функция была введена в Qt 4.6.

См. также 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 указанной brush.

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

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

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

Эта функция была введена в Qt 4.5.

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

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

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

Эта функция была введена в Qt 4.5.

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

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

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

Эта функция была введена в Qt 4.5.

END_OF_DOCUMENT_MARKER

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

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

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

Этот метод был представлен в Qt 4.5.

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

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

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

Этот метод был представлен в Qt 4.5.

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

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

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

Этот метод был представлен в Qt 4.5.

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

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

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

Этот метод был представлен в Qt 4.5.

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

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

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

Этот метод был представлен в Qt 4.5.

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

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

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

Этот метод был представлен в Qt 4.5.

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.

Этот метод был представлен в Qt 4.2.

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

QPaintEngine *QPainter::paintEngine() const

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

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

const QPen &QPainter::pen() const

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

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

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() и Настройки.

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

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

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

void QPainter::setBrushOrigin(const QPointF &position)

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

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

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

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

void QPainter::setBrushOrigin(const QPoint &position)

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

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

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

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

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

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 с заданной операцией обрезки. По умолчанию используется операция замены текущего прямоугольника обрезки.

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

См. также 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) с заданной width и height.

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(CompositionMode mode)

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

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

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

void QPainter::setFont(const QFont &font)

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

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

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

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

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

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

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

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

void QPainter::setOpacity(qreal opacity)

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

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

Эта функция была добавлена в Qt 4.2.

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

void QPainter::setPen(const QPen &pen)

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

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

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

void QPainter::setPen(const QColor &color)

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

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

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

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

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

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

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

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

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

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

Эта функция была добавлена в Qt 4.2.

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

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

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

Эта функция была добавлена в Qt 4.3.

См. также 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. Матрица глобального преобразования не изменяется.

Этот метод был добавлен в Qt 4.2.

См. также 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(RenderHint hint) const

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

Этот метод был добавлен в Qt 4.3.

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

const QTransform &QPainter::transform() const

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

См. также 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.

Этот метод был добавлен в Qt 4.2.

См. также 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-5.9/qpainter.html

Spec-Zone.ru

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