QPainter类

QPainter类在控件和其他绘图设备上执行低级绘画。更多信息...

头文件 #include <QPainter>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
继承自

QStylePainter

注意:此类中的所有函数都是可重入的。重入...

公共类型

classPixmapFragment
枚举CompositionMode { CompositionMode_SourceOver, CompositionMode_DestinationOver, CompositionMode_Clear, CompositionMode_Source, CompositionMode_Destination, …, RasterOp_SourceOrNotDestination }
枚举PixmapFragmentHint { OpaqueHint }
flagsPixmapFragmentHints
枚举RenderHint { Antialiasing, TextAntialiasing, SmoothPixmapTransform, VerticalSubpixelPositioning, LosslessImageRendering, NonCosmeticBrushPatterns }
flagsRenderHints

公共函数

QPainter()
QPainter(QPaintDevice *device)
~QPainter()
const QBrush &background() const
Qt::BGModebackgroundMode() const
boolbegin(QPaintDevice *device)
voidbeginNativePainting()
QRectFboundingRect(const QRectF &rectangle, int flags, const QString &text)
QRectboundingRect(const QRect &rectangle, int flags, const QString &text)
QRectboundingRect(int ,x, int y, int w, int h, int flags, const QString &text)
QRectFboundingRect(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())
const QBrush &brush() const
QPointbrushOrigin() const
QRectFclipBoundingRect() const
QPainterPathclipPath() const
QRegionclipRegion() const
QTransformcombinedTransform() const
QPainter::CompositionModecompositionMode() const
QPaintDevice *device() const
const QTransform &deviceTransform() const
voiddrawArc(const QRectF &rectangle, int startAngle, int spanAngle)
voiddrawArc(const QRect &rectangle, int startAngle, int spanAngle)
voiddrawArc(int x, int y, int width, int height, int startAngle, int spanAngle)
voiddrawChord(const QRectF &rectangle, int startAngle, int spanAngle)
voiddrawChord(int x, int y, int width, int height, int startAngle, int spanAngle)
voiddrawChord(const QRect &rectangle, int startAngle, int spanAngle)
voiddrawConvexPolygon(const QPointF *points, int pointCount)
voiddrawConvexPolygon(const QPolygonF &polygon)
voiddrawConvexPolygon(const QPoint *points, int pointCount)
voiddrawConvexPolygon(const QPolygon &polygon)
voiddrawEllipse(const QRectF &rectangle)
voiddrawEllipse(const QRect &rectangle)
voiddrawEllipse(int x, int y, int width, int height)
voiddrawEllipse(const QPointF &center, qreal rx, qreal ry)
voiddrawEllipse(const QPoint &center, int rx, int ry)
voiddrawGlyphRun(const QPointF &position, const QGlyphRun &glyphs)
voiddrawImage(const QRectF &target, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
voiddrawImage(const QRect &target, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
voiddrawImage(const QPointF &point, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
voiddrawImage(const QPoint &point, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = Qt::AutoColor)
voiddrawImage(const QRectF &rectangle, const QImage &image)
voiddrawImage(const QRect &rectangle, const QImage &image)
voiddrawImage(const QPointF &point, const QImage &image)
voiddrawImage(const QPoint &point, const QImage &image)
voiddrawImage(int x, int y, const QImage &image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::AutoColor)
voiddrawLine(const QLineF &line)
voiddrawLine(const QLine &line)
voiddrawLine(int x1, int y1, int x2, int y2)
voiddrawLine(const QPoint &p1, const QPoint &p2)
voiddrawLine(const QPointF &p1, const QPointF &p2)
voiddrawLines(const QLineF *lines, int lineCount)
voiddrawLines(const QList<QLineF> &lines)
voiddrawLines(const QPointF *pointPairs, int lineCount)
voiddrawLines(const QList<QPointF> &pointPairs)
voiddrawLines(const QLine *lines, int lineCount)
voiddrawLines(const QList<QLine> &lines)
voiddrawLines(const QPoint *pointPairs, int lineCount)
voiddrawLines(const QList<QPoint> &pointPairs)
voiddrawPath(const QPainterPath &path)
voiddrawPicture(const QPointF &
voiddrawPicture(int x, int y, const QPicture &
voiddrawPicture(const QPoint &point, const QPicture &picture)
voiddrawPie(const QRectF &rectangle, int startAngle, int spanAngle)
voiddrawPie(int x, int y, int width, int height, int startAngle, int spanAngle)
voiddrawPie(const QRect &rectangle, int startAngle, int spanAngle)
voiddrawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)
voiddrawPixmap(const QRect &target, const QPixmap &pixmap, const QRect &source)
voiddrawPixmap(int x, int y, int w, int h, const QPixmap &pixmap, int sx, int sy, int sw, int sh)
voiddrawPixmap(int x, int y, const QPixmap &pixmap, int sx, int sy, int sw, int sh)
voiddrawPixmap(const QPointF &point, const QPixmap &pixmap, const QRectF &source)
voiddrawPixmap(const QPoint &point, const QPixmap &pixmap, const QRect &source)
voiddrawPixmap(const QPointF &point, const QPixmap &pixmap)
voiddrawPixmap(const QPoint &point, const QPixmap &pixmap)
voiddrawPixmap(int x, int y, const QPixmap &pixmap)
voiddrawPixmap(const QRect &rectangle, const QPixmap &pixmap)
voiddrawPixmap(int x, int y, int width, int height, const QPixmap &pixmap)
voiddrawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, QPainter::PixmapFragmentHints hints = PixmapFragmentHints())
voiddrawPoint(const QPointF &position)
voiddrawPoint(const QPoint &position)
voiddrawPoint(int x, int y)
voiddrawPoints(const QPointF *points, int pointCount)
voiddrawPoints(const QPolygonF &points)
voiddrawPoints(const QPoint *points, int pointCount)
voiddrawPoints(const QPolygon &points)
voiddrawPolygon(const QPointF *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)
voiddrawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill)
voiddrawPolygon(const QPoint *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)
voiddrawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill)
voiddrawPolyline(const QPointF *points, int pointCount)
voiddrawPolyline(const QPolygonF &points)
voiddrawPolyline(const QPoint *points, int pointCount)
voiddrawPolyline(const QPolygon &points)
voiddrawRect(const QRectF &rectangle)
voiddrawRect(int x, int y, int width, int height)
voiddrawRect(const QRect &rectangle)
voiddrawRects(const QRectF *rectangles, int rectCount)
voiddrawRects(const QList<QRectF> &rectangles)
voiddrawRects(const QRect *rectangles, int rectCount)
voiddrawRects(const QList<QRect> &rectangles)
voiddrawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
voiddrawRoundedRect(int x, int y, int width, int height, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
voiddrawRoundedRect(const QRect &rectangle, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
voiddrawStaticText(const QPointF &topLeftPosition, const QStaticText &staticText)
voiddrawStaticText(const QPoint &topLeftPosition, const QStaticText &staticText)
voiddrawStaticText(int left, int top, const QStaticText &staticText)
voiddrawText(const QPointF &position, const QString &text)
voiddrawText(const QPoint &position, const QString &text)
voiddrawText(int x, int y, const QString &text)
voiddrawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)
voiddrawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect = nullptr)
voiddrawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect = nullptr)
voiddrawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())
voiddrawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &position = QPointF())
voiddrawTiledPixmap(int x, int y, int width, int height, const QPixmap &pixmap, int dx = 0, int dy = 0)
voiddrawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &position = QPoint())
boolend()
voidendNativePainting()
voideraseRect(const QRectF &rectangle)
voideraseRect(int x, int y, int width, int height)
voideraseRect(const QRect &rectangle)
voidfillPath(const QPainterPath &path, const QBrush &fillStyle)
voidfillRect(const QRectF &rectangle, const QBrush &fillStyle)
voidfillRect(int x, int y, int width, int height, const QBrush &fillStyle)
voidfillRect(const QRect &rectangle, const QBrush &fillStyle)
voidfillRect(const QRectF &rectangle, const QColor &color)
voidfillRect(int x, int y, int width, int height, const QColor &color)
voidfillRect(const QRect &rectangle, const QColor &color)
voidfillRect(int x, int y, int width, int height, Qt::GlobalColor color)
voidfillRect(const QRect &rectangle, Qt::GlobalColor color)
voidfillRect(const QRectF &rectangle, Qt::GlobalColor color)
voidfillRect(int x, int y, int width, int height, Qt::BrushStyle style)
voidfillRect(const QRect &rectangle, Qt::BrushStyle style)
voidfillRect(const QRectF &rectangle, Qt::BrushStyle style)
voidfillRect(int x, int y, int width, int height, QGradient::Preset preset)
voidfillRect(const QRect &rectangle, QGradient::Preset preset)
voidfillRect(const QRectF &rectangle, QGradient::Preset preset)
const QFont &font() const
QFontInfofontInfo() const
QFontMetricsfontMetrics() const
boolhasClipping() const
boolisActive() const
Qt::LayoutDirectionlayoutDirection() const
qrealopacity() const
QPaintEngine *paintEngine() const
const QPen &pen() const
QPainter::RenderHintsrenderHints() const
voidresetTransform()
voidrestore()
voidrotate(qreal angle)
voidsave()
voidscale(qreal sx, qreal sy)
voidsetBackground(const QBrush &brush)
voidsetBackgroundMode(Qt::BGMode mode)
voidsetBrush(const QBrush &brush)
voidsetBrush(Qt::BrushStyle style)
voidsetBrushOrigin(const QPointF &position)
voidsetBrushOrigin(int x, int y)
voidsetBrushOrigin(const QPoint &position)
voidsetClipPath(const QPainterPath &path, Qt::ClipOperation operation = Qt::ReplaceClip)
voidsetClipRect(const QRectF &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)
voidsetClipRect(const QRect &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)
voidsetClipRect(int x, int , int width, int height, Qt::ClipOperation operation = Qt::ReplaceClip)
voidsetClipRegion(const QRegion &region, Qt::ClipOperation operation = Qt::ReplaceClip)
voidsetClipping(bool enable)
voidsetCompositionMode(QPainter::CompositionMode mode)
voidsetFont(const QFont &font)
voidsetLayoutDirection(Qt::LayoutDirection direction)
voidsetOpacity(qreal opacity)
voidsetPen(const QPen &pen)
voidsetPen(const QColor &color)
voidsetPen(Qt::PenStyle style)
voidsetRenderHint(QPainter::RenderHint hint, bool on = true)
voidsetRenderHints(QPainter::RenderHints hints, bool on = true)
voidsetTransform(const QTransform &transform, bool combine = false)
voidsetViewTransformEnabled(bool enable)
voidsetViewport(const QRect &rectangle)
voidsetViewport(int x, int y, int width, int height)
voidsetWindow(const QRect &rectangle)
voidsetWindow(int x, int y, int width, int height)
voidsetWorldMatrixEnabled(bool enable)
voidsetWorldTransform(const QTransform &matrix, bool combine = false)
voidshear(qreal sh, qreal sv)
voidstrokePath(const QPainterPath &path, const QPen &pen)
booltestRenderHint(QPainter::RenderHint hint) const
const QTransform &transform() const
voidtranslate(const QPointF &offset)
voidtranslate(const QPoint &offset)
voidtranslate(qreal dx, qreal dy)
boolviewTransformEnabled() const
QRectviewport() const
QRectwindow() const
boolworldMatrixEnabled() const
const QTransform &worldTransform() const

详细描述

QPainter提供了高度优化的函数,以进行GUI程序所需的几乎所有绘图操作。它可以绘制从简单的线条到复杂形状如饼和圆弧。它还可以绘制对齐文本和位图。通常,它在“自然”坐标系中绘制,但也可以进行视图和世界变换。QPainter可以在继承自QPaintDevice类的任何对象上操作。

QPainter的一般用法是在小部件的绘制事件中:构造和自定义(例如设置笔或画刷)绘图笔。然后进行绘制。记得在绘制后销毁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设置和渲染质量的函数,以及其他允许启用裁剪的函数。此外,您可以通过指定绘图笔的组成模式来控制如何合并不同的形状。

isActive()函数指示绘图笔是否处于活动状态。绘图笔通过begin()函数和接受QPaintDevice参数的构造函数激活。函数end()和析构函数将其取消激活。

QPaintDevice类和QPaintEngine类一起,QPainter构成了Qt绘制系统的基石。QPainter是用于执行绘图操作的类。QPaintDevice表示可以使用QPainter进行绘制的设备。QPaintEngine提供了绘图笔用来在不同的设备上绘制接口。如果绘图笔处于活动状态,device()返回绘图笔正在其上绘制的绘图设备,而paintEngine()返回绘图笔当前正在运行的绘图引擎。了解更多信息,请参阅绘制系统

有时,人们希望在非同寻常的QPaintDevice上绘制。QPainter支持一个静态函数来实现这一点,即setRedirected()。

警告:当绘图设备是小部件时,QPainter只能在小部件的paintEvent()函数中或由paintEvent()函数调用的函数中使用。

设置

有一些设置可以自定义,以使QPainter根据您的偏好进行绘制

请注意,其中一些设置反映了某些绘图设备中的设置,例如QWidget::font。函数QPainter::begin()(或等价地,QPainter构造函数)会从绘图设备复制这些属性。

您可以在任何时候通过调用save()函数来保存QPainter的状态,该函数将所有可用的设置保存到一个内部堆栈上。函数restore()将其弹出。

绘图

QPainter类提供绘制大多数原语函数:drawPoint(),drawPoints(),drawLine(),drawRect(),drawRoundedRect(),drawEllipse(),drawArc(),drawPie(),drawChord(),drawPolyline(),drawPolygon(),drawConvexPolygon()和drawCubicBezier()。两个方便的函数drawRects()和drawLines()使用当前钢笔和画布,在给定的QRectsQLines数组中绘制给定数量的矩形或线条。

QPainter类还提供了fillRect()函数,该函数使用指定的QRect填充给定的QBrush,并提供了eraseRect()函数,该函数擦除给定矩形内部区域。

所有这些函数都有整数和浮点版本。

基本绘图示例

基本绘图示例显示了如何使用QPainter类以不同的样式显示基本图形原语。

如果您需要绘制复杂形状,尤其是需要重复绘制时,请考虑创建一个 QPainterPath 并使用 drawPath() 方法进行绘制。

Painter Paths 示例

QPainterPath 类提供了绘画操作的容器,能够构建并重复使用图形形状。

Painter Paths 示例展示了如何使用 painter paths 构建用于渲染的复杂形状。

QPainter 还提供了 fillPath() 函数,它使用给定的 QBrush 填充指定的 QPainterPath,以及 strokePath() 函数,它绘制给定路径的轮廓(即划出路径)。

还可以参考 向量变形 示例,该示例展示了如何使用高级向量技术通过 QPainterPath 绘制文本;渐变 示例展示了 Qt 中可用的不同类型的渐变;以及 路径绘制 示例,该示例展示了 Qt 内置的虚线模式,并展示了如何使用自定义模式扩展可用模式的范围。

文本绘制使用 drawText() 方法进行。当您需要精确的定位时,boundingRect() 方法告诉您给定的 drawText() 命令将绘制在何处。

绘制位图和图像

有用于绘制位图/图像的函数,即 drawPixmap()、drawImage() 和 drawTiledPixmap()。除 drawPixmap() 在屏幕上更快外,drawPixmap() 和 drawImage() 产生相同的结果,而 drawImage() 可能在使用 QPrinter 或其他设备时更快。

有一个 drawPicture() 函数可以绘制整个 QPicture 的内容。这是唯一不忽略所有画家设置的函数,因为 QPicture 有其自身的设置。

绘制高分辨率版本的位图和图像

高分辨率位图具有大于 1 的 设备像素比 值(参见 QImageReaderQPixmap::devicePixelRatio())。如果它与底层 QPaintDevice 的值相匹配,它就会直接绘制到设备上,不适用任何额外的转换。

例如,当在一个设备像素比为 2 的高 DPI 屏幕上绘制大小为 64x64 像素的 QPixmap 时,也会出现这种情况。请注意,此时位图在 用户空间 中实际上是 32x32 像素大小。基于位图大小计算布局几何形状的 Qt 代码路径将使用此大小。结果是,位图被显示为一个高 DPI 位图,而不是一个大位图。

渲染质量

要使用 QPainter 获取最佳的渲染结果,您应使用平台无关的 QImage 作为绘画设备;即使用 QImage 将确保在任何平台上都具有相同的像素表示。

QPainter类还提供了通过其渲染提示枚举和浮点精度支持的机制来控制渲染质量:所有绘制原语的功能都有浮点版本。

    painter.drawEllipse(QRectF(-diameter / 2.0, -diameter / 2.0, diameter, diameter));

它们通常与QPainter::Antialiasing渲染提示一起使用。

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);
比较同心圆(使用int和float,以及有或无抗锯齿渲染)。使用浮点精度版本生成均匀间隔的环。抗锯齿渲染产生平滑的圆。

RenderHint枚举指定的标记有关,特定的引擎可能支持或不支持这些标记。`QPainter::Antialiasing`表示可以在可能的情况下为原语边缘抗锯齿,`QPainter::TextAntialiasing`表示可以在可能的情况下为文本抗锯齿,而`QPainter::SmoothPixmapTransform`表示应该使用平滑的像素变换算法。

函数`renderHints()`返回一个指定此画家设置的渲染提示的标志。使用函数`setRenderHint()`设置或清除当前的`RenderHints`。

坐标变换

通常,QPainter在设备的自己的坐标系(通常是像素)上操作,但QPainter对坐标变换有很好的支持。

最常用的变换是缩放、旋转、平移和剪切。使用`scale()`函数按给定偏移量缩放坐标系,使用`rotate()`函数顺时针旋转坐标系,使用`translate()`平移(即在点上加一个给定偏移量)。您还可以使用`shear()`函数围绕原点扭曲坐标系。有关剪切坐标系的可视化,请参阅仿射变换示例。

有关变换如何影响QPainter渲染图形原语的详细说明,请参阅变换示例。特别是,它显示了变换的顺序如何影响结果。

仿射变换示例

`Affine Transformations`示例展示了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 提供了定义数字图像复合的 Porter-Duff 规则的枚举类型 CompositionMode;它描述了一个将一个图像(源)中的一个像素与另一个图像(目标)中的像素组合的模型。

最常见的两种合成形式是 SourceSourceOver。在 Source 中,用于在绘图设备上绘制不透明对象。在此模式下,源中的每个像素都替换目标中相应的像素。在 SourceOver 合成模式下,源对象是透明的,并绘制在目标上方。

请注意,合成变换是按像素进行的。因此,使用图形原语本身及其边界矩形之间存在区别:边界矩形包含 alpha == 0(即围绕原语的像素)的像素。这些像素将覆盖其他图像的像素,有效地清除它们,而原语只覆盖其自身区域。

组合模式示例

Qt 示例目录中的组合模式示例,允许您试验各种组合模式并立即查看结果。

限制

如果您在使用基于光栅的绘图画布时使用坐标,请注意,虽然可以使用大于或等于 +/- 215 的坐标,但在此范围之外的绘画操作不保证显示;绘图可能会被裁剪。这是由于实现中使用了 short int

Qt 的绘笔生成的轮廓在处理曲线形状时只是近似。在大多数情况下,使用另一条贝塞尔曲线段表示贝塞尔曲线段的轮廓是不可能的,因此 Qt 通过使用多个较小的曲线来近似曲线轮廓。出于性能原因,Qt 对于这些轮廓使用的曲线数量有一定的限制,因此当使用大笔宽或缩放时,轮廓误差会增大。为了生成较小的误差轮廓,可以使用具有QPainterPathStroker类,该类具有setCurvesThreshold成员函数,允许用户指定错误容限。另一个解决方案是将路径首先转换为多边形,然后再绘制多边形。

性能

QPainter 是一个功能丰富的框架,允许开发人员进行各种图形操作,例如渐变、组合模式和矢量图形。QPainter 能够在不同硬件和软件栈上执行这些操作。当然,底层硬件和软件的组合对性能有一些影响,并且在组合各种组合模式、画笔、裁剪、转换等操作时,确保每一项操作都足够快几乎是一项不可能的任务,因为组合的可能性太多。为了妥协,我们选择了 QPainter API 和后端的一个子集,其中性能保证比硬件和软件的给定组合中可以合理实现的性能要好。

我们关注作为高性能引擎的后端是

  • 光栅 - 此后端在纯软件中实现所有渲染,并且始终用于将内容渲染到 QImages 中。为了获得最佳性能,请仅使用以下格式类型:QImage::Format_ARGB32_PremultipliedQImage::Format_RGB32QImage::Format_RGB16。任何其他格式,包括 QImage::Format_ARGB32,性能都会明显下降。此引擎默认用于 QWidgetQPixmap
  • OpenGL 2.0 (ES) - 此后端是硬件加速图形的主要后端。它可以在支持 OpenGL 2.0 或 OpenGL/ES 2.0 规范的桌面计算机和嵌入式设备上运行。这包括最近几年生产的几乎所有的图形芯片。可以通过使用 QPainter 在一个 QOpenGLWidget 上启用该引擎。

这些操作包括

  • 简单的转换,意味着平移和缩放,加上 0、90、180、270 度旋转。
  • 与简单转换和透明度(以非平滑转换模式)结合的 drawPixmap()(默认不启用作为渲染提示的 QPainter::SmoothPixmapTransform)。
  • 使用单色、双色线性渐变和简单转换的矩形填充。
  • 使用简单转换和交集中裁剪的矩形裁剪。
  • 组合模式 QPainter::CompositionMode_SourceQPainter::CompositionMode_SourceOver
  • 使用单色和双色线性渐变填充的圆角矩形填充。
  • 3x3 补丁位图,通过 qDrawBorderPixmap 实现。

本列表指出了在一个性能关键的应用程序中哪些特性可以安全使用。对于某些配置,其他操作可能也很快,但在广泛使用它们之前,建议在软件最终运行的系统上对它们进行基准测试和验证。在某些情况下,即使操作代价高昂,也可以使用,例如,当结果在 QPixmap 中缓存时。

另见 QPaintDeviceQPaintEngineQt SVG基本绘制示例绘制实用函数

成员类型文档

enum QPainter::CompositionMode

定义了数字图像合成支持的模式。合成模式用于指定如何将一个图像(源)中的像素与另一个图像(目标)中的像素合并。

请注意,位图光栅操作模式(带有 RasterOp 前缀表示)仅在 X11 和光栅绘制引擎中本机支持。这意味着在 macOS 中使用这些模式的方法是通过对 QImage 进行操作。标记为 RasterOp 的混合模式不支持具有 alpha 分量的画笔和刷子。此外,开启 QPainter::Antialiasing 渲染提示将会有效地禁用 RasterOp 模式。

最常见的是 SourceOver(通常称为 alpha 混合),在这种情况下,源像素与目标像素混合,源像素的 alpha 成分定义像素的不透明度。

有几个合成模式需要源或目标图像具有 alpha 通道才能生效。为获得最佳性能,建议使用 Format_ARGB32_Premultiplied 图像格式。

设置合成模式后,它将应用于所有绘制操作、画笔、刷子、渐变和位图/图像绘制。

常量描述
QPainter::CompositionMode_SourceOver0这是默认模式。使用源 alpha 对像素与目标混合。
QPainter::CompositionMode_DestinationOver1使用目标的 alpha 将它混合到源像素上。这是 CompositionMode_SourceOver 的逆。
QPainter::CompositionMode_Clear2无论源如何,都清除目标中的像素(设置为完全不透明)。
QPainter::CompositionMode_Source3输出是源像素。(这意味着基本复制操作,并且当源像素不透明时与 SourceOver 相同)。
QPainter::CompositionMode_Destination4输出是目标像素。这意味着混合没有效果。这是 CompositionMode_Source 的逆。
QPainter::CompositionMode_SourceIn5输出是源,其中 alpha 通过目标减少。
QPainter::CompositionMode_DestinationIn6输出是目标,其中 alpha 通过源减少。这是 CompositionMode_SourceIn 的逆。
QPainter::CompositionMode_SourceOut7输出是源,其中 alpha 通过目标的倒数减少。
QPainter::CompositionMode_DestinationOut8输出是目标,其中 alpha 通过源的倒数减少。这是 CompositionMode_SourceOut 的逆。
QPainter::CompositionMode_SourceAtop9源像素在目标像素上混合,源像素的 alpha 由目标像素的 alpha 减少。
QPainter::CompositionMode_DestinationAtop10目标像素在上层融合,目标像素的alpha值通过目标像素的alpha值减小。此模式是CompositionMode_SourceAtop的倒数。
QPainter::CompositionMode_Xor11通过与目标alpha值的倒数相减后,源像素被合并到目标上,目标像素的alpha值通过源alpha值的倒数减小。CompositionMode_Xor与位运算的Xor不同。
QPainter::CompositionMode_Plus12源像素和目标像素的alpha和颜色相加。
QPainter::CompositionMode_Multiply13输出是源颜色乘以目标颜色。与白色相乘的颜色的颜色不变,而与黑色相乘则产生黑色。
QPainter::CompositionMode_Screen14源颜色和目标颜色相减后取反,然后相乘。用白色进行阈操作产生白色,而用黑色进行阈操作则颜色不变。
QPainter::CompositionMode_Overlay15根据目标颜色乘法或阈操作颜色。目标颜色与源颜色混合,以反映目标的光亮或暗淡程度。
QPainter::CompositionMode_Darken16选择源颜色和目标颜色中的较暗色。
QPainter::CompositionMode_Lighten17选择源颜色和目标颜色中的较亮色。
QPainter::CompositionMode_ColorDodge18通过增强目标颜色来反射源颜色。黑色源颜色不改变目标颜色。
QPainter::CompositionMode_ColorBurn19通过变暗目标颜色来反射源颜色。白色源颜色不改变目标颜色。
QPainter::CompositionMode_HardLight20根据源颜色乘法或阈操作颜色。亮色源颜色会使目标颜色变亮,而暗色源颜色会使目标颜色变暗。
QPainter::CompositionMode_SoftLight21根据源颜色变暗或变亮颜色。类似于CompositionMode_HardLight。
QPainter::CompositionMode_Difference22从较亮颜色中减去较暗颜色。用白色绘画反转目标颜色,而用黑色绘画则不改变目标颜色。
QPainter::CompositionMode_Exclusion23类似于CompositionMode_Difference,但对比度较低。用白色绘画反转目标颜色,而用黑色绘画则不改变目标颜色。
QPainter::RasterOp_SourceOrDestination24执行源像素和目标像素的按位或操作(src OR dst)。
QPainter::RasterOp_SourceAndDestination25执行源像素和目标像素的按位与操作(src AND dst)。
QPainter::RasterOp_SourceXorDestination26执行源像素和目标像素的按位异或操作(src XOR dst)。
QPainter::RasterOp_NotSourceAndNotDestination27执行源像素和目标像素的按位非或操作((NOT src) AND (NOT dst))。
QPainter::RasterOp_NotSourceOrNotDestination28执行源像素和目标像素的按位非与操作((NOT src) OR (NOT dst))。
QPainter::RasterOp_NotSourceXorDestination29执行按位操作,先将源像素反转,然后与目标像素进行异或操作((NOT src) XOR dst)。
QPainter::RasterOp_NotSource30执行按位操作,反转源像素(NOT src)。
QPainter::RasterOp_NotSourceAndDestination31执行按位操作,先将源像素反转,然后与目标像素进行与操作((NOT src) AND dst)。
QPainter::RasterOp_SourceAndNotDestination32执行按位操作,先将目标像素反转,然后与源像素进行与操作(src AND (NOT dst))。
QPainter::RasterOp_NotSourceOrDestination33执行按位操作,先将源像素反转,然后与目标像素进行或操作((NOT src) OR dst)。
QPainter::RasterOp_ClearDestination35独立于源,清除目标中的像素(设置为0)。
QPainter::RasterOp_SetDestination36目标像素的设置(设置为1)与源图像无关。
QPainter::RasterOp_NotDestination37执行位运算,将目标像素求反(NOT dst)。
QPainter::RasterOp_SourceOrNotDestination34执行位运算,将源图像与反相后的目标像素进行或运算(src OR (NOT dst))。

另请参阅compositionMode(),setCompositionMode(),合成模式图像合成示例

enum QPainter::PixmapFragmentHint
flags QPainter::PixmapFragmentHints

常量描述
QPainter::OpaqueHint0x01表示要绘制的位图片段不透明。不透明片段可能绘图更快。

PixmapFragmentHints 类型是 QFlags<PixmapFragmentHint> 的 typedef,用于存储 PixmapFragmentHint 值的或组合。

另请参阅QPainter::drawPixmapFragments() 和 QPainter::PixmapFragment

enum QPainter::RenderHint
flags QPainter::RenderHints

Renderhints 用于指定可能或不被引擎尊重的标志。

常量描述
QPainter::Antialiasing0x01表示当可能时,引擎应该对原始图形的边缘进行反走样。
QPainter::TextAntialiasing0x02表示当可能时,引擎应该对文本进行反走样。要强制禁用文本的反走样,请勿使用此提示。相反,请在字体样式策略上设置 QFont::NoAntialias
QPainter::SmoothPixmapTransform0x04表示当可能时,引擎应使用平滑的位图转换算法(例如双线性)而不是最近邻居。
QPainter::VerticalSubpixelPositioning0x08允许文本在垂直方向上以像素分数进行定位,前提是字体引擎支持。这在当前平台上当提示首选项设置为 QFont::PreferNoHinting 时由 Freetype 支持,以及在 macOS 上。对于大多数用例,这不会提高视觉质量,但可能会增加内存消耗并降低一些文本渲染性能。因此,只有在使用场景确实需要时才建议启用此功能。一个可能的使用场景是对齐符号与其它视觉原始图形。此值是在 Qt 6.1 中添加的。
QPainter::LosslessImageRendering0x40尽可能使用无损图像渲染。目前,此提示仅在通过 QPrinterQPdfWriter 使用 QPainter 输出 PDF 文件时使用,其中 drawImage()/drawPixmap() 调用将使用无损压缩算法进行图像编码,而不是有损JPEG压缩。此值是在 Qt 5.13 中添加的。
QPainter::NonCosmeticBrushPatterns0x80在用预定义的图案样式绘制画笔时,同时变换图案以及绘制的对象。默认情况下,将图案视为装饰性的,因此图案像素将直接映射到设备像素,独立于任何活动变换。此值是在 Qt 6.4 中添加的。

RenderHints 类型是 QFlags<RenderHint> 的 typedef,用于存储 RenderHint 值的或组合。

另请参阅renderHints(),setRenderHint() 和 渲染质量

成员函数文档

QPainter::QPainter()

构造一个画家。

另请参阅 begin() 和 end().

[显式] QPainter::QPainter(QPaintDevice *device)

constructs一个画家,立即开始在画布device上绘画。

此构造函数对短暂的画家很有用,例如在QWidget::paintEvent()中,应该只使用一次。构造函数会帮您调用begin(),而QPainter析构函数会自动调用end()。

下面是一个使用begin()和end()的例子

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

使用此构造函数的相同例子

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

由于构造函数无法在画家初始化失败时提供反馈,因此在打印外部设备(如打印机)时应使用begin()和end()。

另请参阅 begin() 和 end().

[noexcept] QPainter::~QPainter()

销毁画家。

const QBrush &QPainter::background() const

返回当前背景画刷。

另请参阅 setBackground() 和 设置

Qt::BGMode QPainter::backgroundMode() const

返回当前背景模式。

另请参阅 setBackgroundMode() 和 设置

bool QPainter::begin(QPaintDevice *device)

开始在画布device上绘画,如果成功则返回true;否则返回false

注意,调用begin()时,所有画家设置(如setPen()、setBrush()等)都会重置为默认值。

可能发生的错误是严重的问题,例如这些

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::Format_Indexed8格式在QImage上绘图。

另请参阅 end() 和 QPainter

void QPainter::beginNativePainting()

清空绘图管道并准备让用户直接向底层图形上下文发送命令。必须跟随一个对endNativePainting的调用。

注意,只有底层引擎改变的状态会被重置为其相应的默认状态。我们重置的状态可能从一次发布到下一次发布有所变化。以下是在OpenGL 2引擎中当前重置的状态

  • 杂合被禁用
  • 深度、模板和剪裁测试被禁用
  • 活动的纹理单元被重置为0
  • 深度掩码、深度函数和清除深度被重置为其默认值
  • 模板掩码、模板操作和模板函数被重置为其默认值
  • 当前颜色被重置为纯白色

例如,如果用户在beginNativePaint()/endNativePainting() 块内更改OpenGL多边形模式,则它不会被 endNativePainting() 重置为默认状态。以下是一个示例,显示了画笔命令和原始OpenGL命令的混合使用。

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

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

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

glDisable(GL_SCISSOR_TEST);

painter.endNativePainting();

请参阅endNativePainting

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

返回文本的边界矩形,该文本将在使用当前设置的 字体,以及在给定的 rectangle 内以指定的 flags 绘制时的外观;即该函数告诉您,当给定相同的参数时,drawText() 函数将绘制在哪里。

如果使用指定的 flags 将文本放入给定的 rectangle 中,则该函数返回所需的矩形。

flags 参数是以下标志的按位或运算结果

如果同时设置了几个水平或垂直对齐标志,则最终的对齐方式是未定义的。

请参阅drawText(),Qt::AlignmentQt::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::AlignmentFlagQt::TextFlag 的按位或运算结果,这个重载函数接受一个 option 参数。QTextOption 类提供了一个关于通用富文本属性的描述。

请参阅QTextOption

const QBrush &QPainter::brush() const

返回画笔的当前刷子。

另请参阅 QPainter::setBrush() 以及 设置.

QPoint QPainter::brushOrigin() const

返回当前设置的画笔原点。

另请参阅 setBrushOrigin() 以及 设置.

QRectF QPainter::clipBoundingRect() const

如果存在裁剪区域,则返回当前裁剪区域的边界矩形;否则返回空矩形。请注意,裁剪区域是以逻辑坐标给出的。

边界矩形不保证是紧贴的。

另请参阅 setClipRect(),setClipPath() 以及 setClipRegion()。

QPainterPath QPainter::clipPath() const

返回逻辑坐标中的当前裁剪路径。

警告: QPainter 并不显式地存储组合裁剪,因为这由底层的 QPaintEngine 处理,所以路径在需要时才重新创建并转换到当前的逻辑坐标系。这可能是一个昂贵的操作。

另请参阅 setClipPath(),clipRegion() 以及 setClipping()。

QRegion QPainter::clipRegion() const

返回当前设置的裁剪区域。请注意,裁剪区域是以逻辑坐标给出的。

警告: QPainter 并不显式地存储组合裁剪,因为这由底层的 QPaintEngine 处理,所以路径在需要时才重新创建并转换到当前的逻辑坐标系。这可能是一个昂贵的操作。

另请参阅 setClipRegion(),clipPath() 以及 setClipping()。

QTransform QPainter::combinedTransform() const

返回组合当前窗口/视口和世界变换的变换矩阵。

另请参阅 setWorldTransform(),setWindow() 以及 setViewport()。

QPainter::CompositionMode QPainter::compositionMode() const

返回当前组合模式。

另请参阅 组合模式 以及 setCompositionMode()。

QPaintDevice *QPainter::device() const

返回当前油漆设备上正在绘画的画刷,如果没有活动,则返回 nullptr

另请参阅 isActive()。

const QTransform &QPainter::deviceTransform() const

返回将逻辑坐标转换为平台相关绘图设备的设备坐标的矩阵。

此函数仅在使用平台相关绘图命令的平台相关句柄(Qt::HANDLE)并且在平台中不进行自然转换时需要。

可以使用 QPaintEngine::PaintEngineFeature 枚举来查询平台是否执行转换。

另请参阅 worldTransform() 以及 QPaintEngine::hasFeature()。

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

根据给定的rectanglestartAnglespanAngle绘制圆弧。

startAnglespanAngle必须以1/16度为单位指定,即完整圆等于5760(16 * 360)。角度的正值表示逆时针方向,负值表示顺时针方向。0度在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)

这是一个重载函数。

根据给定的rectanglestartAnglespanAngle绘制圆弧。

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

这是一个重载函数。

以指定widthheight以及给定的startAnglespanAngle开始绘制由矩形rectangle定义的圆弧。

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

根据给定的rectanglestartAnglespanAngle绘制弦,弦用当前刷子填充。

startAnglespanAngle必须以1/16度为单位指定,即完整圆等于5760(16 * 360)。角度的正值表示逆时针方向,负值表示顺时针方向。0度在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)

这是一个重载函数。

以指定widthheight以及给定的startAnglespanAngle开始绘制由矩形rectangle定义的弦。

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

这是一个重载函数。

根据给定的rectanglestartAnglespanAngle绘制弦。

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

使用当前笔绘制由数组points中的前pointCount个点定义的凸多边形。

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)

这是一个重载函数。

使用当前笔绘制由数组points中的前pointCount个点定义的凸多边形。

void QPainter::drawConvexPolygon(const QPolygon &polygon)

这是一个重载函数。

使用当前画笔和画刷绘制由 polygon 定义的凸多边形。

void QPainter::drawEllipse(const QRectF &rectangle)

根据给定的 rectangle 绘制椭圆。

填充椭圆的大小为 rectanglesize()。 线条椭圆的大小为 rectanglesize() 加上线宽。

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)

这是一个重载函数。

绘制从(xy)开始,有给定 widthheight 的矩形定义的椭圆。

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

这是一个重载函数。

绘制位于 center,半径为 rxry 的椭圆。

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

这是一个重载函数。

绘制位于 center,半径为 rxry 的椭圆。

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

position 位置绘制由 glyphs 表示的符号。 position 给出了符号字符串基线的边缘。符号将从 glyphs 上选择的字体以及 glyphs 中给定的偏移量中检索。

另请参阅 QGlyphRun::setRawFont(),QGlyphRun::setPositions() 和 QGlyphRun::setGlyphIndexes().

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

将指定图像的矩形片段source绘制到绘图设备中的目标矩形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绘制到绘图设备中的目标矩形target

注意: 如果图像和矩形大小不一致,图像将被缩放以适应矩形。

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

这是一个重载函数。

以给定的point为原点绘制给定图像的矩形片段source

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

这是一个重载函数。

以给定的point为原点绘制给定图像的矩形片段source

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

这是一个重载函数。

将指定图像绘制到指定的rectangle

注意: 如果图像和矩形大小不一致,图像将被缩放以适应矩形。

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

这是一个重载函数。

将指定图像绘制到指定的rectangle

注意: 如果图像和矩形大小不一致,图像将被缩放以适应矩形。

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

这是一个重载函数。

将给定图像绘制到给定point处。

void QPainter::drawImage(const QPoint &point, const QImage &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)处通过将图像的一部分复制到画布中来绘制图像。

(x, y)指定了要绘制到画布中的左上角点。(sx, sy)指定了要绘制到图像中的左上角点。默认为(0, 0)。

(sw, sh)指定了要绘制的图像大小。默认值(0, 0)(和负值)表示从左上角到底右角。

void QPainter::drawLine(const QLineF &line)

根据line定义绘制一线。

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

QPainter painter(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)

这是一个重载函数。

p1p2绘制一线。

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

这是一个重载函数。

p1p2绘制一线。

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

使用当前笔触绘制数组lines中的前lineCount条线。

另请参阅drawLine()和drawPolyline

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

这是一个重载函数。

使用当前笔触和画刷绘制由列表lines定义的一组线。

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

这是一个重载函数。

使用当前笔触绘制数组pointPairs中的前lineCount条线。线由点对指定,因此pointPairs中的条目数必须是lineCount * 2。

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

这是一个重载函数。

使用当前画笔在每个输入向量 pointPairs 的点对中绘制一条线。如果数组中的点个数是奇数,最后一个点将被忽略。

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

这是一个重载函数。

使用当前笔触绘制数组lines中的前lineCount条线。

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

这是一个重载函数。

使用当前笔触和画刷绘制由列表lines定义的一组线。

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

这是一个重载函数。

使用当前画笔绘制 pointPairs 数组中的前 lineCount 条线。

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

这是一个重载函数。

使用当前画笔在每个输入向量 pointPairs 的点对中绘制一条线。

void QPainter::drawPath(const QPainterPath &path)

使用当前画笔绘制给定的 path,使用当前画笔绘制轮廓,当前画刷进行填充。

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

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

另请参阅绘图路径示例矢量变形示例

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

在给定的 point 上回放给定的 picture

QPicture 类是一个记录和回放 QPainter 命令的绘图设备。一个图片将画笔命令序列化到一个平台无关的IO设备中。可以在小部件或位图上绘制的所有内容也可以存储在图片中。

当调用 point = QPointF(0, 0)时,此函数与 QPicture::play() 的功能完全相同。

注意:此函数通过保留画笔的状态。

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

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

另请参阅QPicture::play()。

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

这是一个重载函数。

在点 (x, y) 上绘制给定的 picture

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

这是一个重载函数。

在给定的 point 上回放给定的 picture

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

使用指定的矩形、起始角度和跨角度绘制饼图。

饼图使用当前 画刷 填充。

startAnglespanAngle必须以1/16度为单位指定,即完整圆等于5760(16 * 360)。角度的正值表示逆时针方向,负值表示顺时针方向。0度在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) 为起点,具有指定 widthheight 的矩形,以及给定 startAnglespanAngle 的饼图。

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

这是一个重载函数。

使用给定的 rectanglestartAngle 以及 spanAngle 绘制饼图。

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

将给定 pixmap 的矩形区域 source 绘制到绘画设备中的给定 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 painter(this);
painter.drawPixmap(target, pixmap, source);

如果 pixmapQBitmap,则使用画笔的颜色绘制 "设置" 的位。如果 backgroundModeQt::OpaqueMode,则使用背景画刷的颜色绘制 "未设置" 的位;如果 backgroundModeQt::TransparentMode,则 "未设置" 的位是透明的。不支持使用渐变或纹理颜色绘制位图。

另请参阅 drawImage() 和 QPixmap::devicePixelRatio

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

这是一个重载函数。

将给定 pixmap 的矩形区域 source 绘制到绘画设备中的给定 target

注意:如果位图和矩形尺寸不一致,则位图将按比例缩放以适应矩形。

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

这是一个重载函数。

绘制以原点(sxsy)为起点,宽sw和高度sh的矩形部分,在给定的pixmap中,在点(xy)处,宽w和高度h。如果sw或sh等于零,则使用和调整pixmap的宽度和高度sx/sy;

void QPainter::drawPixmapint xint y,const QPixmap &pixmapint sxint syint swint sh

这是一个重载函数。

通过拷贝给定pixmap的一部分到绘图设备,在(xy)处绘制pixmap。

xy)指定绘图设备中将被绘制到的左上点。(sxsy)指定要绘制的pixmap中的左上点。默认为(0,0)。

swsh)指定要绘制的pixmap的大小。默认值(0,0)(以及负值)表示从左上角到底右角。

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

这是一个重载函数。

在给定的point处绘制给定pixmap的矩形部分source

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

这是一个重载函数。

在给定的point处绘制给定pixmap的矩形部分source

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

这是一个重载函数。

在给定的point处绘制给定的pixmap

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

这是一个重载函数。

在给定的point处绘制给定的pixmap

void QPainter::drawPixmapint xint y,const QPixmap &pixmap

这是一个重载函数。

在位置(xy)处绘制给定的pixmap

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

这是一个重载函数。

在给定的rectangle中绘制给定的pixmap

注意:如果位图和矩形尺寸不一致,则位图将按比例缩放以适应矩形。

void QPainter::drawPixmapint xint yint widthint height,const QPixmap &pixmap

这是一个重载函数。

绘制到位置(xy)的矩形中,有给定的宽度width和高度height

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

此函数用于在多个位置以不同的缩放、旋转和透明度绘制 pixmappixmap 的子矩形。fragments 是一个包含 fragmentCount 个元素的数组,用于指定绘制每个 pixmap 片段的参数。《i translate="no">hints 参数可以用于传递绘图提示。

与多次调用 drawPixmap() 相比,此函数可能更快,因为后端可以优化状态更改。

另请参阅 QPainter::PixmapFragmentQPainter::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)

使用当前笔的颜色绘制数组 points 中的前 pointCount 个点。

另请参阅 坐标系.

void QPainter::drawPoints(const QPolygonF &points)

这是一个重载函数。

绘制向量 points 中的点。

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

这是一个重载函数。

使用当前笔的颜色绘制数组 points 中的前 pointCount 个点。

void QPainter::drawPoints(const QPolygon &points)

这是一个重载函数。

绘制向量 points 中的点。

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

使用当前笔和刷绘制由数组 points 中前 pointCount 个点定义的多边形。

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);

第一个点默认连接到最后一个点,多边形使用当前 填充。

如果 fillRuleQt::WindingFill,则使用环绕填充算法填充多边形。如果 fillRuleQt::OddEvenFill,则使用奇偶填充算法填充多边形。有关这些填充规则的更详细描述,请参阅 Qt::FillRule

另请参阅 drawConvexPolygon(),drawPolyline() 和 坐标系

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

这是一个重载函数。

使用指定的填充规则 fillRule 绘制由给定的 points 定义的多边形。

void QPainter::drawPolygon(const QPoint *pointsint pointCountQt::FillRule fillRule = Qt::OddEvenFill)

这是一个重载函数。

绘制由数组 points 的前 pointCount 个点定义的多边形。

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

这是一个重载函数。

使用指定的填充规则 fillRule 绘制由给定的 points 定义的多边形。

void QPainter::drawPolyline(const QPointF *pointsint pointCount)

使用当前笔绘制由 points 中前 pointCount 个点定义的折线。

注意,与 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);

另请参阅 drawLinesdrawPolygon坐标系

void QPainter::drawPolyline(const QPolygonF &points)

这是一个重载函数。

使用当前笔绘制由给定的 points 定义的折线。

void QPainter::drawPolyline(const QPoint *pointsint pointCount)

这是一个重载函数。

使用当前笔绘制由 points 中前 pointCount 个点定义的折线。

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);

另请参阅 drawRectsdrawPolygon坐标系

void QPainter::drawRect(int xint yint widthint height)

这是一个重载函数。

绘制一个矩形,其左上角在 (xy),给定 widthheight

void QPainter::drawRect(const QRect &rectangle)

这是一个重载函数。

使用当前笔刷和笔绘制当前的 rectangle

void QPainter::drawRects(const QRectF *rectanglesint rectCount)

使用当前笔刷和笔绘制给定的 rectangles 的前 rectCount 个。

另请参阅 drawRect

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

这是一个重载函数。

使用当前笔刷和笔绘制给定的rectangles

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

这是一个重载函数。

使用当前笔刷和笔绘制给定的 rectangles 的前 rectCount 个。

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

这是一个重载函数。

使用当前笔刷和笔绘制给定的rectangles

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

绘制具有圆角的矩形rect

xRadiusyRadius参数指定定义圆角矩形角的椭圆的半径。当modeQt::RelativeSize时,xRadiusyRadius分别以矩形宽度和高度的 halves 的百分比指定,应在0.0到100.0之间。

填充矩形的尺寸为rect.size()。带边框的矩形尺寸为rect.size()加上笔宽。

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

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

另请参阅 drawRect() 和 QPen

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

这是一个重载函数。

绘制具有圆角的矩形xywh

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

这是一个重载函数。

绘制具有圆角的矩形rect

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

在指定的topLeftPosition处绘制给定的staticText

文本将使用画家的字体和变换来绘制。如果画家的字体和/或变换与用于初始化QStaticText布局的不同,则布局将需要重新计算。请使用QStaticText::prepare()使用将要绘制时使用的字体和变换来初始化staticText

如果topLeftPosition与初始化staticText时或上次绘制时不相同,则在将文本转换到新位置时会有轻微的开销。

注意: 如果画家的变换不是仿射变换,则 staticText 将使用常规的调用 drawText() 绘制,从而失去任何潜在的性能改进机会。

注意: 使用字体顶部作为 y 位置的坐标。

另请参阅 QStaticText.

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

这是一个重载函数。

topLeftPosition 处绘制 staticText

注意: 使用字体顶部作为 y 位置的坐标。

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

这是一个重载函数。

在坐标 lefttop 处绘制 staticText

注意: 使用字体顶部作为 y 位置的坐标。

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

按照当前定义的文字方向,从给定的 position 开始绘制给定的 text

此函数不处理换行符 (\n),因为它不能将文本拆分成多行,也不能显示换行符。如果想要使用带有换行符的文本绘制多行文本,或者想要文本换行,请使用接受矩形而非位置的 QPainter::drawText() 重载。

默认情况下,QPainter 使用反走样方式绘制文本。

注意: 使用字体底线作为 y 位置的坐标。

另请参阅 setFont() 和 setPen().

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

这是一个重载函数。

按照当前定义的文字方向,从给定的 position 开始绘制给定的 text

默认情况下,QPainter 使用反走样方式绘制文本。

注意: 使用字体底线作为 y 位置的坐标。

另请参阅 setFont() 和 setPen().

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

这是一个重载函数。

使用画家当前定义的文字方向在位置 (x, y) 处绘制给定的 text

默认情况下,QPainter 使用反走样方式绘制文本。

注意: 使用字体底线作为 y 位置的坐标。

另请参阅 setFont() 和 setPen().

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

这是一个重载函数。

在提供的 rectangle 内绘制给定的 text。该 rectangle 与对齐 flags 一起定义了 text 的锚点。

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

如果非空,boundingRect 被设置为包含整个文本的边界矩形。例如,在下面的图像中,虚线表示函数计算出的 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 参数是以下标志的按位或运算结果

默认情况下,QPainter 使用反走样方式绘制文本。

注意: rectangle 的 y 坐标用于字体的顶部。

另请参阅 Qt::AlignmentFlag, Qt::TextFlag, boundingRect() 和 layoutDirection().

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

这是一个重载函数。

根据指定的 flags 在提供的 rectangle 内绘制给定的 text

如果 boundingRect 不为空,则将其设置为包围整个文本应以使其成为边界矩形的值。例如,在以下图像中,虚线代表该函数计算的 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 使用反走样方式绘制文本。

注意: rectangle 的 y 坐标用于字体的顶部。

另请参阅 setFont() 和 setPen().

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

这是一个重载函数。

在以 (x, y) 为原点、widthheight 为宽度的矩形内绘制给定的 text

如果 boundingRect 不为空,则将其设置为要包容整个文本的边界矩形。例如,在下图中,虚线代表该函数计算的 boundingRect,而虚线代表由 xywidthheight 定义的矩形。

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 参数是以下标志的按位或运算结果

默认情况下,QPainter 使用反走样方式绘制文本。

注意: 使用字体顶部作为 y 位置的坐标。

另请参阅 Qt::AlignmentFlagQt::TextFlagsetFont() 和 setPen()。

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

这是一个重载函数。

使用 option 控制文本的位置、方向和朝向,在指定的 rectangle 中绘制给定的 text。在 option 中给出的选项将覆盖 QPainter 对象本身上设置的选项。

默认情况下,QPainter 使用反走样方式绘制文本。

注意: rectangle 的 y 坐标用于字体的顶部。

另请参阅 setFont() 和 setPen().

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

在其原点为给定点 position 的给定 rectangle 内绘制平铺的 pixmap

调用 drawTiledPixmap() 与多次调用 drawPixmap() 填充 (平铺) 一个区域大致相同,但根据底层窗口系统,可能更高效。

在具有 (devicePixelRatio > 1) 的高 dpi 显示器上,drawTiledPixmap() 将产生与正常 dpi 显示器相同的视觉平铺模式。将 pixmap 上的 devicePixelRatio 设置为控制平铺大小。例如,将其设置为 2 则将平铺宽度和高度(在 1x 和 2x 显示器上)减半,并在 2x 显示器上产生高分辨率输出。

position 偏移量始终在画家坐标系中,而不依赖于显示设备PixelRatio。

另请参阅 drawPixmap()。

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

这是一个重载函数。

在指定的矩形内绘制平铺的pixmap

(x, y) 指定了要绘制的画布中的左上角点;给定 widthheight。(sx, sy) 指定了

pixmap

的左上角点,它将被绘制;默认为 (0, 0)。

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

这是一个重载函数。

在其原点为给定点 position 的给定 rectangle 内绘制平铺的 pixmap

bool QPainter::end()

结束绘图。绘制过程中使用的任何资源都将被释放。通常不需要调用此函数,因为它在析构函数中被调用。

如果画家不再活动,则返回true;否则返回false

另请参阅 begin() 和 isActive()。

void QPainter::endNativePainting()

在手动发出本地绘图命令后恢复画家。在调用任何其他画家命令之前,允许画家恢复其依赖的任何本地状态。

另请参阅 beginNativePainting()。

void QPainter::eraseRect(const QRectF &rectangle)

擦除给定rectangle区域内的区域。等同于调用

fillRect(rectangle, background());

另请参阅 fillRect()。

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

这是一个重载函数。

擦除从 (x, y) 开始,具有给定 widthheight 的矩形内的区域。

void QPainter::eraseRect(const QRect &rectangle)

这是一个重载函数。

擦除给定rectangle区域内的区域。

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

使用指定的brush填充给定的path。不绘制轮廓。

或者,您可以指定一个 QColor 而不是 QBrush;带有 QColor 参数的 QBrush 构造函数将自动创建一个纯色图案画刷。

另请参阅 drawPath()。

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

使用指定的brush填充给定的rectangle

或者,您可以指定一个 QColor 而不是 QBrush;带有 QColor 参数的 QBrush 构造函数将自动创建一个纯色图案画刷。

另请参阅 drawRect

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

这是一个重载函数。

使用给定的 brush 填充以 xy 为起始点的矩形,宽度为 width,高度为 height

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

这是一个重载函数。

使用指定的 brush 填充给定的 rectangle

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

这是一个重载函数。

使用指定的 color 填充给定的 rectangle

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

这是一个重载函数。

使用给定的 color 填充以 xy 为起始点的矩形,宽度为 width,高度为 height

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

这是一个重载函数。

使用指定的 color 填充给定的 rectangle

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

这是一个重载函数。

使用给定的 color 填充以 xy 为起始点的矩形,宽度为 width,高度为 height

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

这是一个重载函数。

使用指定的 color 填充给定的 rectangle

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

这是一个重载函数。

使用指定的 color 填充给定的 rectangle

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

这是一个重载函数。

使用给定的 brush style 填充以 xy 为起始点的矩形,宽度为 width,高度为 height

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

这是一个重载函数。

使用指定的 brush style 填充给定的 rectangle

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

这是一个重载函数。

使用指定的 brush style 填充给定的 rectangle

void QPainter::fillRect(int x, int y, int width, int height, QGradient::Preset preset)

这是一个重载函数。

使用给定的 宽度高度,以给定的渐变 预置 填充以 (x, y) 为起始点的矩形。

void QPainter::fillRect(const QRect &rectangle, QGradient::Preset preset)

这是一个重载函数。

使用指定的渐变 预置 填充电度。

void QPainter::fillRect(const QRectF &rectangle, QGradient::Preset preset)

这是一个重载函数。

使用指定的渐变 预置 填充电度。

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

如果已调用 begin() 且尚未调用 end(),则返回 true;否则返回 false

另请参阅begin()和QPaintDevice::paintingActive

Qt::LayoutDirection QPainter::layoutDirection() const

返回绘图器绘制文本时使用的布局方向。

另请参阅QTextOption::textDirectionsetLayoutDirectiondrawText设置

qreal QPainter::opacity() const

返回绘图器的透明度。默认值为1。

另请参阅setOpacity

QPaintEngine *QPainter::paintEngine() const

如果绘图器是活动的,则返回绘图器当前正在操作的绘图引擎;否则返回0。

另请参阅 isActive()。

const QPen &QPainter::pen() const

返回绘图器的当前画笔。

另请参阅 setPen() 和 设置

QPainter::RenderHints QPainter::renderHints() const

返回一个标志,指定为此绘图器设置的渲染提示。

另请参阅 setRenderHints(),testRenderHint() 和 渲染质量

void QPainter::resetTransform()

重置使用 translatescaleshearrotatesetWorldTransformsetViewportsetWindow 创建的任何变换。

另请参阅 坐标变换

void QPainter::restore()

恢复当前绘图器状态(从栈中移除保存的状态)。

另请参阅 save

void QPainter::rotate(qreal angle)

按顺时针方向旋转坐标系。给定的angle参数以度为单位。

另请参阅 setWorldTransform坐标变换

void QPainter::save()

保存当前绘图器状态(将状态推入栈)。保存()后必须跟相应的 restore(); end() 函数会展开栈。

另请参阅 restore

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

将坐标系按 (sxsy) 缩放。

另请参阅 setWorldTransform坐标变换

void QPainter::setBackground(const QBrush &brush)

将绘图器的背景画刷设置为给定的brush

背景画刷是在绘制不透明文本、阴影线和位图时填充的画刷。在透明背景模式下(默认模式),背景画刷没有效果。

另请参阅 背景setBackgroundMode设置

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

将绘图器的背景模式设置为给定的mode

Qt::TransparentMode(默认)绘制阴影线和文本而不设置背景像素。Qt::OpaqueMode则用当前背景色填充这些空间。

注意,为了透明地绘制位图或 pixmap,您必须使用QPixmap::setMask

另请参阅backgroundModesetBackgroundSettings

void QPainter::setBrush(const QBrush &brush)

将画笔的画刷设置为给定的brush

画笔的画刷定义了形状如何被填充。

另请参阅brushSettings

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

这是一个重载函数。

将画笔设置为黑色并指定style

void QPainter::setBrushOrigin(const QPointF &position)

将画刷原点设置为position

画刷原点指定画笔画刷的(0, 0)坐标。

注意,虽然在 Qt 3 中brushOrigin() 是必要的,以便采用则小部件的背景,但从 Qt 4 开始的画笔不再这样做,除非您通过将小部件的autoFillBackground属性设置为 true 来显式地告诉它这样做。

另请参阅brushOriginSettings

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

这是一个重载函数。

将画刷原点设置为点(x, y)。

void QPainter::setBrushOrigin(const QPoint &position)

这是一个重载函数。

将画刷原点设置为给定的position

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

启用裁剪,并将画笔的裁剪路径设置为给定path,使用给定的裁剪operation

注意,裁剪路径是在逻辑(画笔)坐标中指定的。

另请参阅clipPathclipRegionClipping

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

启用裁剪,并使用给定的剪贴rectangle和给定的剪贴operation设置剪贴区域。默认操作是替换当前剪贴矩形。

注意,剪贴矩形是在逻辑(画笔)坐标中指定的。

另请参阅clipRegionsetClippingClipping

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

这是一个重载函数。

启用裁剪,并使用指定的裁剪operation将裁剪区域设置为由给定rectangle定义的区域。

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

启用裁剪,并将裁剪区域设置为由指定点(x, y)、宽width和高height定义的矩形。

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

使用指定的裁剪operation将裁剪区域设置为给定的region。默认的裁剪操作是替换当前裁剪区域。

注意,裁剪区域是以逻辑坐标给出的。

另请参阅clipRegion(),setClipRect()和裁剪

void QPainter::setClipping(bool enable)

如果enable为真,则启用裁剪;如果enable为假,则禁用裁剪。

另请参阅hasClipping()和裁剪

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

将合成模式设置为给定的mode

警告:只有在对QImage操作的QPainter完全支持所有合成模式。RasterOp模式受X11支持,如compositionMode中所述。

另请参阅compositionMode

void QPainter::setFont(const QFont &font)

将画笔的字体设置为给定的font

该字体用于之后的drawText()函数。文本颜色与画笔颜色相同。

如果你设置了一个不可用的字体,Qt将会寻找一个最接近的匹配项。font()将返回你使用setFont设置的值,而fontInfo()将返回实际正在使用的字体(可能和设置的相同)。

另请参阅font(),drawText()和设置

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

设置画家在绘制文本时使用的布局方向为指定的direction

默认为Qt::LayoutDirectionAuto,它将从绘制的文本中隐含地确定方向。

另请参阅 QTextOption::setTextDirection()、layoutDirection()、drawText() 和 Settings

void QPainter::setOpacity(qreal opacity)

将画笔的透明度设置为 opacity。值应在0.0到1.0之间,其中0.0为完全透明,1.0为完全不透明。

对画笔设置的透明度将应用于所有绘图操作。

另请参阅 opacity

void QPainter::setPen(const QPen &pen)

将画笔的笔设置为给定的 pen

pen 定义如何绘制线条和轮廓,同时也定义了文字颜色。

另请参阅 pen() 和 Settings

void QPainter::setPen(const QColor &color)

这是一个重载函数。

将画笔的笔设置为具有样式 Qt::SolidLine、宽度1和指定的 color

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

这是一个重载函数。

将画笔的笔设置为具有给定的 style、宽度1和黑色。

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

如果 on 为真,则在画笔上设置给定的渲染 hint;否则清除渲染提示。

另请参阅 setRenderHints()、renderHints() 和 Rendering Quality

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

如果 on 为真,则在画笔上设置给定的渲染 hints;否则清除渲染提示。

另请参阅 setRenderHint()、renderHints() 和 Rendering Quality

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

设置世界变换矩阵。如果 combine 为真,则将指定的 transform 与当前矩阵合并;否则用当前矩阵替换。

另请参阅 transform() 和 setWorldTransform

void QPainter::setViewTransformEnabled(bool enable)

如果 enable 为真,则启用视图变换;如果 enable 为假,则禁用视图变换。

另请参阅 viewTransformEnabled() 和 窗口-视口转换

void QPainter::setViewport(const QRect &rectangle)

将画笔的视图矩形设置为给定的 rectangle,并启用视图变换。

视口矩形是视图变换的一部分。视口指定了设备坐标系统。其姐妹函数 window(),指定了逻辑坐标系统。

默认视口矩形与设备的矩形相同。

另请参阅viewportviewTransformEnabled 以及 窗口-视口转换

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

这是一个重载函数。

将画家的视口矩形设置为以 (x, y) 开始,给定的 widthheight 的矩形。

void QPainter::setWindow(const QRect &rectangle)

将画家的窗口设置为给定的 rectangle,并启用视图变换。

窗口矩形是视图变换的一部分。窗口指定了逻辑坐标系统。其姐妹函数 viewport(),指定了设备坐标系统。

默认窗口矩形与设备的矩形相同。

另请参阅windowviewTransformEnabled 以及 窗口-视口转换

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

这是一个重载函数。

将画家的窗口设置为以 (x, y) 开始,并具有给定的 widthheight 的矩形。

void QPainter::setWorldMatrixEnabled(bool enable)

如果 enable 为真,则启用变换;如果 enable 为假,则禁用变换。世界变换矩阵不改变。

另请参阅worldMatrixEnabledworldTransform 以及 坐标变换

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

设置世界变换矩阵。如果 combine 为真,则指定的 matrix 与当前矩阵合并;否则它将替换当前矩阵。

另请参阅worldTransformtransform 以及 setTransform

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

通过 (sh, sv) 对坐标系进行剪切。

另请参阅 setWorldTransform坐标变换

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

使用由 pen 指定的画笔绘制路径 path 的轮廓(描边)。

另请参阅fillPath绘图

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

如果设置了hint则返回 true;否则返回 false。

另请参阅renderHints() 和 setRenderHint()。

const QTransform &QPainter::transform() const

worldTransform 的别名。返回世界变换矩阵。

另请参阅setTransform() 和 worldTransform()。

void QPainter::translate(const QPointF &offset)

通过给定的 offset 平移坐标系;即给定的 offset 被添加到点坐标中。

另请参阅 setWorldTransform坐标变换

void QPainter::translate(const QPoint &offset)

这是一个重载函数。

通过给定的 offset 平移坐标系。

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

这是一个重载函数。

通过向量 (dx, dy) 平移坐标系。

bool QPainter::viewTransformEnabled() const

如果启用了视图变换则返回 true;否则返回 false。

另请参阅setViewTransformEnabled() 和 worldTransform()。

QRect QPainter::viewport() const

返回视口矩形。

另请参阅setViewport() 和 setViewTransformEnabled()。

QRect QPainter::window() const

返回窗口矩形。

另请参阅setWindow() 和 setViewTransformEnabled()。

bool QPainter::worldMatrixEnabled() const

如果启用了世界变换则返回 true;否则返回 false。

另请参阅setWorldMatrixEnabled(),worldTransform() 和 坐标系

const QTransform &QPainter::worldTransform() const

返回世界变换矩阵。

另请参阅setWorldTransform()。

© 2024 Qt公司版权所有。其中包含的文档贡献的版权属于各自的拥有者。在此提供的文档根据自由软件基金会发布的 GNU自由文档许可版本1.3 的条款进行许可。Qt及其相应的商标是芬兰和/或全球其他国家的 Qt公司商标。所有其他商标均为其各自所有者的财产。