Spec-Zone.ru › Qt 5.11

Класс QPainter

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

Заголовок: #include <QPainter>
qmake: QT += gui
  • Список всех членов, включая унаследованные
  • Устаревшие члены

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

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

класс PixmapFragment
перечисление РежимКомпозиции { CompositionMode_SourceOver, CompositionMode_DestinationOver, CompositionMode_Clear, CompositionMode_Source, ..., RasterOp_SourceOrNotDestination }
перечисление ПодсказкаPixmapFragment { OpaqueHint }
флаги ПодсказкиPixmapFragment
перечисление ПараметрОтрисовки { Antialiasing, TextAntialiasing, SmoothPixmapTransform, HighQualityAntialiasing, NonCosmeticDefaultPen, Qt4CompatiblePainting }
флаги ПараметрыОтрисовки

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

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
QPainter::CompositionMode compositionMode() const
QPaintDevice * device() const
const QTransform & deviceTransform() const
void drawArc(const QRectF &rectangle, int startAngle, int spanAngle)
void drawArc(const QRect &rectangle, int startAngle, int spanAngle)
void drawArc(int x, int y, int width, int height, int startAngle, int spanAngle)
void drawChord(const QRectF &rectangle, int startAngle, int spanAngle)
void drawChord(int x, int y, int width, int height, int startAngle, int spanAngle)
void drawChord(const QRect &rectangle, int startAngle, int spanAngle)
void drawConvexPolygon(const QPointF *points, int pointCount)
void drawConvexPolygon(const QPolygonF &polygon)
void drawConvexPolygon(const QPoint *points, int pointCount)
void drawConvexPolygon(const QPolygon &polygon)
void drawEllipse(const QRectF &rectangle)
void drawEllipse(const QRect &rectangle)
void drawEllipse(int x, int y, int width, int height)
void drawEllipse(const QPointF &center, qreal rx, qreal ry)
void drawEllipse(const QPoint &center, int rx, int ry)
void drawGlyphRun(const QPointF &position, const QGlyphRun &glyphs)
void drawImage(const QRectF &target, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(const QRect &target, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(const QPointF &point, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = ...)
void drawImage(const QPoint &point, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = ...)
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)
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 QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, QPainter::PixmapFragmentHints hints = ...)
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 = ...)
void drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = ...)
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 = nullptr)
void drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect = nullptr)
void drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect = nullptr)
void drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())
void drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &position = QPointF())
void drawTiledPixmap(int x, int y, int width, int height, const QPixmap &pixmap, int sx = 0, int sy = 0)
void drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &position = ...)
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
QPainter::RenderHints renderHints() const
void resetTransform()
void restore()
void rotate(qreal angle)
void save()
void scale(qreal sx, qreal sy)
void setBackground(const QBrush &brush)
void setBackgroundMode(Qt::BGMode mode)
void setBrush(const QBrush &brush)
void setBrush(Qt::BrushStyle style)
void setBrushOrigin(const QPointF &position)
void setBrushOrigin(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(QPainter::CompositionMode mode)
void setFont(const QFont &font)
void setLayoutDirection(Qt::LayoutDirection direction)
void setOpacity(qreal opacity)
void setPen(const QPen &pen)
void setPen(const QColor &color)
void setPen(Qt::PenStyle style)
void setRenderHint(QPainter::RenderHint hint, bool on = true)
void setRenderHints(QPainter::RenderHints hints, bool on = true)
void setTransform(const QTransform &transform, bool combine = false)
void setViewTransformEnabled(bool enable)
void setViewport(const QRect &rectangle)
void setViewport(int x, int y, int width, int height)
void setWindow(const QRect &rectangle)
void setWindow(int x, int y, int width, int height)
void setWorldMatrixEnabled(bool enable)
void setWorldTransform(const QTransform &matrix, bool combine = false)
void shear(qreal sh, qreal sv)
void strokePath(const QPainterPath &path, const QPen &pen)
bool testRenderHint(QPainter::RenderHint hint) const
const QTransform & transform() const
void translate(const QPointF &offset)
void translate(const QPoint &offset)
void translate(qreal dx, qreal dy)
bool viewTransformEnabled() const
QRect viewport() const
QRect window() const
bool worldMatrixEnabled() const
const QTransform & worldTransform() const

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

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

QPainter предоставляет высокооптимизированные функции для выполнения большинства операций отрисовки, необходимых графическим приложениям. Он может отрисовывать все, от простых линий до сложных фигур, таких как секторы и хорды. Также он может отрисовывать выровненный текст и пиксельмапы. Обычно он рисует в «естественной» системе координат, но также может выполнять преобразования вида и мира. 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.

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

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

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

enum QPainter::PixmapFragmentHintflags QPainter::PixmapFragmentHints

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

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

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

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

enum QPainter::RenderHintflags QPainter::RenderHints

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

Константа Значение Описание
QPainter::Antialiasing 0x01 Указывает, что движок должен применять сглаживание краёв примитивов, если это возможно.
QPainter::TextAntialiasing 0x02 Указывает, что движок должен применять сглаживание текста, если это возможно. Чтобы принудительно отключить сглаживание текста, не используйте этот параметр. Вместо этого установите QFont::NoAntialias в стратегии стиля шрифта.
QPainter::SmoothPixmapTransform 0x04 Указывает, что движок должен использовать алгоритм плавной трансформации растровых изображений (например, билинейный), а не ближайшего соседа.
QPainter::HighQualityAntialiasing 0x08 Это значение устарело и будет проигнорировано. Используйте вместо него параметр сглаживания Antialiasing.
QPainter::NonCosmeticDefaultPen 0x10 Это значение устарело; по умолчанию для QPen теперь используется некосметическое значение.
QPainter::Qt4CompatiblePainting 0x20 Параметр совместимости, указывающий движку использовать те же правила заполнения, основанные на X11, что и в Qt 4, где сглаженное рендеринг смещается чуть менее чем на половину пикселя. Также будет обрабатывать дефолтные, сконструированные пером, как косметические. Может быть полезно при портировании приложения Qt 4 в Qt 5.

Тип RenderHints является типом-псевдонимом для 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() будет рисовать, если ей будут переданы те же аргументы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также QTextOption.

const QBrush &QPainter::brush() const

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

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

QPoint QPainter::brushOrigin() const

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

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

QRectF QPainter::clipBoundingRect() const

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

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

Эта функция была введена в 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().

QPainter::CompositionMode QPainter::compositionMode() const

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

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

QPaintDevice *QPainter::device() const

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

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

const QTransform &QPainter::deviceTransform() const

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

void QPainter::drawConvexPolygon(const QPolygonF &polygon)

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

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

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

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

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

void QPainter::drawConvexPolygon(const QPolygon &polygon)

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

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

void QPainter::drawEllipse(const QRectF &rectangle)

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

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

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

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

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

void QPainter::drawEllipse(const QRect &rectangle)

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

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

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

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

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

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 = ...)

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

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

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

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

Рисует прямоугольную часть 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)

Рисует заданный путь рисования 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 и пример деформации векторов.

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.

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

Угол начала и угол обзора должны быть указаны в 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 с началом в заданной точке point.

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

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

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

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

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

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

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

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

Рисует заданную pixmap в заданный rectangle.

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

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

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

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

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

Этот метод используется для рисования 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 с текущей кистью и заливкой.

Заполненный прямоугольник имеет размеры 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) и заданными width и height.

void QPainter::drawRect(const QRect &rectangle)

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

Рисует текущий rectangle с текущей кистью и заливкой.

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

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

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

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

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

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

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

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

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

void QPainter::drawRects(const QVector<QRect> &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 = ...)

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

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

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

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

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

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

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

Рисует заданный text внутри заданного rectangle. Rectangle вместе с флагами выравнивания определяет якоря для 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 = 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 = 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() несколько раз для заполнения (плитирования) области изображением pixmap, но может быть значительно эффективнее в зависимости от используемой операционной системы.

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

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

Рисует плиткообразно 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) с заданной шириной и высотой.

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) с заданной шириной и высотой, используя заданную 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) с заданной шириной и высотой, используя заданный цвет color.

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

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

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

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

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

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

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

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

Эта функция была добавлена в 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) заданной шириной и высотой, используя указанный стиль кисти.

Эта функция была добавлена в 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() и Настройки.

QPainter::RenderHints QPainter::renderHints() const

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

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

void QPainter::resetTransform()

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

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

void QPainter::restore()

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

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

void QPainter::rotate(qreal angle)

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

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

void QPainter::save()

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

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

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

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

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

void QPainter::setBackground(const QBrush &brush)

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

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

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

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

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

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

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

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

void QPainter::setBrush(const QBrush &brush)

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

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

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

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

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

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

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

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

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

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

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

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

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

void QPainter::setFont(const QFont &font)

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

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

Если вы установите шрифт, недоступный для Qt, Qt найдёт близкое совпадение. font() вернёт то, что вы установили с помощью setFont(), а 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(QPainter::RenderHint hint, bool on = true)

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

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

void QPainter::setRenderHints(QPainter::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(QPainter::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/archives/qt-5.11/qpainter.html

Spec-Zone.ru

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