QPainterPath 类

QPainterPath 类提供了一个绘画操作容器,使得图形形状可以被构造和重用。更多...

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

公共类型

Element
枚举ElementType { MoveToElement, LineToElement, CurveToElement, CurveToDataElement }

公共函数

QPainterPath()
QPainterPath(const QPointF &startPoint)
QPainterPath(const QPainterPath &path)
~QPainterPath()
voidaddEllipse(const QRectF &boundingRectangle)
voidaddEllipse(qreal x, qreal y, qreal width, qreal height)
voidaddEllipse(const QPointF &center, qreal rx, qreal ry)
voidaddPath(const QPainterPath &path)
voidaddPolygon(const QPolygonF &polygon)
voidaddRect(const QRectF &rectangle)
voidaddRect(qreal x, qreal y, qreal width, qreal height)
voidaddRegion(const QRegion &region)
voidaddRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
voidaddRoundedRect(qreal x, qreal y, qreal w, qreal h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
voidaddText(const QPointF &point, const QFont &font, const QString &text)
voidaddText(qreal x, qreal y, const QFont &font, const QString &text)
qrealangleAtPercent(qreal t) const
voidarcMoveTo(const QRectF &rectangle, qreal angle)
voidarcMoveTo(qreal x, qreal y, qreal width, qreal height, qreal angle)
voidarcTo(const QRectF &rectangle, qreal startAngle, qreal sweepLength)
voidarcTo(qreal x, qreal y, qreal width, qreal height, qreal startAngle, qreal sweepLength)
QRectFboundingRect() const
intcapacity() const
voidclear()
voidcloseSubpath()
voidconnectPath(const QPainterPath &path)
boolcontains(const QPointF &point) const
boolcontains(const QRectF &rectangle) const
boolcontains(const QPainterPath &p) const
QRectFcontrolPointRect() const
voidcubicTo(const QPointF &c1, const QPointF &c2, const QPointF &endPoint)
voidcubicTo(qreal c1X, qreal c1Y, qreal c2X, qreal c2Y, qreal endPointX, qreal endPointY)
QPointFcurrentPosition() const
QPainterPath::ElementelementAt(int index) const
intelementCount() const
Qt::FillRulefillRule() const
QPainterPathintersected(const QPainterPath &p) const
boolintersects(const QRectF &rectangle) const
boolintersects(const QPainterPath &p) const
boolisEmpty() const
qreallength() const
voidlineTo(const QPointF &endPoint)
voidlineTo(qreal x, qreal y)
voidmoveTo(const QPointF &point)
voidmoveTo(qreal x, qreal y)
qrealpercentAtLength(qreal len) const
QPointFpointAtPercent(qreal t) const
voidquadTo(const QPointF &c, const QPointF &endPoint)
voidquadTo(qreal cx, qreal cy, qreal endPointX, qreal endPointY)
voidreserve(int size)
voidsetElementPositionAt(int index, qreal x, qreal y)
voidsetFillRule(Qt::FillRule fillRule)
QPainterPathsimplified() const
qrealslopeAtPercent(qreal t) const
QPainterPathsubtracted(const QPainterPath &p) const
voidswap(QPainterPath &other)
QPolygonFtoFillPolygon(const QTransform &matrix = QTransform()) const
QList<QPolygonF>toFillPolygons(const QTransform &matrix = QTransform()) const
QPainterPathtoReversed() const
QList<QPolygonF>toSubpathPolygons(const QTransform &matrix = QTransform()) const
voidtranslate(qreal dx, qreal dy)
voidtranslate(const QPointF &offset)
QPainterPathtranslated(qreal dx, qreal dy) const
QPainterPathtranslated(const QPointF &offset) const
QPainterPathunited(const QPainterPath &p) const
booloperator!=(const QPainterPath &path) const
QPainterPathoperator&(const QPainterPath &other) const
QPainterPath &operator&=(const QPainterPath &other)
QPainterPath操作符+(const QPainterPath &other) const
QPainterPath &操作符+=(const QPainterPath &other)
QPainterPath操作符-(const QPainterPath &other) const
QPainterPath &操作符-=(const QPainterPath &other)
QPainterPath &操作符=(const QPainterPath &path)
QPainterPath &操作符=(QPainterPath &&other)
bool操作符==(const QPainterPath &path) const
QPainterPath操作符|(const QPainterPath &other) const
QPainterPath &操作符|=(const QPainterPath &other)
QDataStream &操作符<<(QDataStream &stream, const QPainterPath &path)
QDataStream &操作符==>(QDataStream &stream, QPainterPath &path)

详细描述

绘图路径是由一系列图形构建块组成的对象,例如矩形、椭圆、线和曲线。构建块可以连接成封闭的子路径,例如矩形或椭圆。封闭路径有重合的起始点和终点。或者它们可以独立存在为不封闭的子路径,如线和曲线。

QPainterPath对象可用于填充、描边和裁剪。要为给定的绘图路径生成填充轮廓,请使用QPainterPathStroker类。绘图路径相对于普通绘制操作的主要优势是,复杂形状只需要创建一次;然后可以通过调用QPainter::drawPath()函数多次绘制。

QPainterPath提供了一组函数,可用于获取路径及其元素的信息。另外,还可以使用toReversed()函数倒序元素的顺序。还有多个函数将此绘图路径对象转换为多边形表示。

组成QPainterPath

QPainterPath对象可以作为空路径、给定起始点或另一QPainterPath对象的副本进行构造。一旦创建,就可以使用lineTo()、arcTo()、cubicTo()和quadTo()函数向路径添加线和曲线。这些线和曲线从currentPosition()延伸到作为参数传递的位置。

QPainterPath对象的currentPosition()始终是最后添加的子路径的终点位置(或初始起始点)。使用moveTo()函数移动currentPosition()而不添加组件。moveTo()函数隐式地开始一个新的子路径,并关闭之前的子路径。启动新子路径的另一种方法是调用closeSubpath()函数,通过从currentPosition()到路径起始位置的线来关闭当前路径。请注意,新路径将(0,0)作为其初始的currentPosition()。

QPainterPath类还提供了一些方便的函数用于向画家路径中添加封闭的子路径:addEllipse(),addPath(),addRect(),addRegion()和addText()。函数addPolygon()添加一个未封闭的子路径。实际上,这些函数都是一系列moveTo(),lineTo()和cubicTo()操作的集合。

此外,可以使用connectPath()函数将路径添加到当前路径中。但请注意,该函数会通过添加直线将当前路径的最后一个元素与给定路径的第一个元素连接起来。

以下是一个代码片段,展示了如何使用QPainterPath对象:

QPainterPath path;
path.addRect(20, 20, 60, 60);

path.moveTo(0, 0);
path.cubicTo(99, 0,  50, 50,  99, 99);
path.cubicTo(0, 99,  50, 50,  0, 0);

QPainter painter(this);
painter.fillRect(0, 0, 100, 100, Qt::white);
painter.setPen(QPen(QColor(79, 106, 25), 1, Qt::SolidLine,
                    Qt::FlatCap, Qt::MiterJoin));
painter.setBrush(QColor(122, 163, 39));

painter.drawPath(path);

画家路径在构造时默认为空。我们首先添加一个矩形,它是一个封闭的子路径。然后添加两个贝塞尔曲线,它们共同形成一个封闭的子路径,即使它们本身并不是封闭的。最后,绘制整个路径。该路径使用默认的填充规则Qt::OddEvenFill进行填充。Qt为填充路径提供了两种方法

有关规则的定义,请参阅Qt::FillRule文档。可以使用fillRule()函数检索当前设置的填充规则,并使用setFillRule()函数修改填充规则。

QPainterPath 信息

QPainterPath类提供了一套用于获取路径及其元素信息的函数。

函数currentPosition()返回最后添加的子路径的终点(或初始起点)。可以调用elementAt()函数检索各种子路径元素,使用elementCount()函数检索元素的数量,而isEmpty()函数用来判断此QPainterPath对象是否包含任何元素。

函数controlPointRect()返回包含此路径中所有点和控制点的矩形。此函数的运算速度比精确的boundingRect()函数快得多,后者返回画家路径的边界矩形,具有浮点精度。

最后,QPainterPath提供了contains()函数,该函数可用于确定给定点或矩形是否在路径内部,以及intersects()函数,该函数用于确定给定矩形内的任何点是否也在此路径内。

QPainterPath 转换

出于兼容性原因,可能需要简化画家路径的表示:QPainterPath提供了toFillPolygon(),toFillPolygons()和toSubpathPolygons()函数,这些函数将画家路径转换为多边形。函数toFillPolygon()将画家路径作为单个多边形返回,后两个函数则返回多边形列表。

提供了toFillPolygons() 和 toSubpathPolygons() 函数,因为通常绘制多个小多边形比绘制一个大多边形要快,尽管绘制的总点数相同。两者的区别在于它们返回的多边形数量:toSubpathPolygons() 函数对于每个子路径创建一个多边形,无论子路径是否相交(即重叠边界矩形),而toFillPolygons() 函数只为相交的子路径创建一个多边形。

toFillPolygon() 和 toFillPolygons() 函数首先将所有子路径转换为多边形,然后使用重绕技术以确保可以使用正确的填充规则填充重叠的子路径。请注意,重绕会在多边形中插入额外的线条,因此填充多边形的轮廓与路径的轮廓不匹配。

示例

Qt 提供了位于 Qt 示例目录中的 绘图路径示例矢量变形示例

绘图路径示例 展示了如何使用绘图路径构建用于渲染的复杂形状,并允许用户试验填充和描边。 矢量变形示例 展示了如何使用 QPainterPath 绘制文本。

也请参阅 QPainterPathStrokerQPainter、《QRegion 和 绘图路径示例

成员类型文档

enum QPainterPath::ElementType

此枚举描述了用于连接子路径顶点的元素的类型。

请注意,使用addEllipseaddPathaddPolygonaddRectaddRegion() 和 addText 的便利函数添加为闭合子路径的元素实际上是通过使用 moveTolineTocubicTo 函数作为单独的元素集合添加到路径中的。

常量描述
QPainterPath::MoveToElement0新的子路径。另请参阅 moveTo
QPainterPath::LineToElement1一条线。另请参阅 lineTo
QPainterPath::CurveToElement2一个曲线。另请参阅 cubicToquadTo
QPainterPath::CurveToDataElement3CurveToElement元素中描述曲线所需的额外数据。

另请参阅 elementAt() 和 elementCount()。

成员函数文档

[noexcept] QPainterPath::QPainterPath()

构建一个空的 QPainterPath 对象。

[explicit] QPainterPath::QPainterPath(const QPointF &startPoint)

创建一个 QPainterPath 对象,其当前位置由给定的 startPoint 形成。

QPainterPath::QPainterPath(const QPainterPath &path)

创建一个 QPainterPath 对象,它是对给定 path 的副本。

另请参阅 operator=

[noexcept] QPainterPath::~QPainterPath()

销毁这个 QPainterPath 对象。

void QPainterPath::addEllipse(const QRectF &boundingRectangle)

在指定的 boundingRectangle 内创建椭圆并将其作为闭合子路径添加到绘图路径中。

椭圆由一个顺时针曲线组成,起点和终点在零度(3点钟位置)。

QLinearGradient myGradient;
QPen myPen;
QRectF boundingRectangle;

QPainterPath myPath;
myPath.addEllipse(boundingRectangle);

QPainter painter(this);
painter.setBrush(myGradient);
painter.setPen(myPen);
painter.drawPath(myPath);

参见 arcTo(),QPainter::drawEllipse(),以及 组合 QPainterPath

void QPainterPath::addEllipse(qreal x, qreal y, qreal width, qreal height)

这是一个重载函数。

创建一个以其左上角位置在 (x, y),宽为 width 和高为 height 的边界矩形内的椭圆,并将其作为闭合子路径添加到绘图路径中。

void QPainterPath::addEllipse(const QPointF &center, qreal rx, qreal ry)

这是一个重载函数。

创建一个位于 center 处,半径分别为 rxry 的椭圆,并作为闭合子路径添加到绘图路径中。

void QPainterPath::addPath(const QPainterPath &path)

将指定的 path 作为闭合子路径添加到 this 路径中。

参见 connectPath() 和 组合 QPainterPath

void QPainterPath::addPolygon(const QPolygonF &polygon)

将指定的 polygon 作为未闭合子路径添加到路径中。

注意,在添加多边形后,当前位置是 polygon 的最后一个点。要绘制一条线回到第一个点,请使用 closeSubpath() 函数。

QLinearGradient myGradient;
QPen myPen;
QPolygonF myPolygon;

QPainterPath myPath;
myPath.addPolygon(myPolygon);

QPainter painter(this);
painter.setBrush(myGradient);
painter.setPen(myPen);
painter.drawPath(myPath);

参见 lineTo() 和 组合 QPainterPath

void QPainterPath::addRect(const QRectF &rectangle)

将指定的 rectangle 作为闭合子路径添加到路径中。

矩形作为一个顺时针方向的线集添加。在添加 rectangle 后,绘图路径的当前位置在矩形的左上角。

QLinearGradient myGradient;
QPen myPen;
QRectF myRectangle;

QPainterPath myPath;
myPath.addRect(myRectangle);

QPainter painter(this);
painter.setBrush(myGradient);
painter.setPen(myPen);
painter.drawPath(myPath);

参见 addRegion(),lineTo() 和 组合 QPainterPath

void QPainterPath::addRect(qreal x, qreal y, qreal width, qreal height)

这是一个重载函数。

在位置(xy)添加矩形,给定宽度和高度,作为一个闭合的子路径。

void QPainterPath::addRegion(const QRegion &region)

通过将区域中的每个矩形作为一个单独的闭合子路径添加,将给定的region添加到路径中。

另请参阅addRect() 和 组合 QPainterPath

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

将具有圆角的矩形rect添加到路径中。

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

另请参阅addRect().

void QPainterPath::addRoundedRect(qreal x, qreal y, qreal w, qreal h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)

这是一个重载函数。

将具有圆角的矩形 xywh 添加到路径中。

void QPainterPath::addText(const QPointF &point, const QFont &font, const QString &text)

将给定的 text 作为从提供的 font 创建的一组闭合子路径添加到该路径中。子路径的位置使文本基线的左端位于指定的 point

某些字体会产生重叠的子路径,可能需要 Qt::WindingFill 填充规则才能正确渲染。

QLinearGradient myGradient;
QPen myPen;
QFont myFont;
QPointF baseline(x, y);

QPainterPath myPath;
myPath.addText(baseline, myFont, tr("Qt"));

QPainter painter(this);
painter.setBrush(myGradient);
painter.setPen(myPen);
painter.drawPath(myPath);

另请参阅QPainter::drawText组合 QPainterPathsetFillRule

void QPainterPath::addText(qreal x, qreal y, const QFont &font, const QString &text)

这是一个重载函数。

将给定的文本作为一组封闭子路径添加到此路径中,这些子路径由提供的字体创建。子路径的位置使得文本基线的左端位于点(xy)处。

qreal QPainterPath::angleAtPercent(qreal t) const

返回路径在比例t处的切线角度。参数t必须在0和1之间。

正角度值表示逆时针方向,而负角度值表示顺时针方向。零度为3点钟位置。

注意,与其他百分比方法类似,在曲线存在于路径中时,百分比测量并非与长度线性相关。当存在曲线时,百分比参数将映射到贝塞尔方程的t参数。

void QPainterPath::arcMoveTo(const QRectF &rectangle, qreal angle)

创建一个在给定rectangle处、角度为angle的弧上的移动。

角度以度为单位指定。可以使用负角度指定逆时针弧。

另请参阅moveTo() 和 arcTo()。

void QPainterPath::arcMoveTo(qreal x, qreal y, qreal width, qreal height, qreal angle)

这是一个重载函数。

创建一个在点(xy),宽度为width,高度为heightQRectF处、角度为angle的弧上的移动。

void QPainterPath::arcTo(const QRectF &rectangle, qreal startAngle, qreal sweepLength)

创建一个占据给定rectangle、从指定的startAngle开始并顺时针扩展sweepLength度的弧。

角度以度为单位指定。可以使用负角度指定逆时针弧。

注意,如果弧的起点和当前位置尚未连接,则此函数将连接它们的起点。在添加弧之后,当前位置是弧中的最后一个点。要绘制一条返回到第一个点的线,请使用closeSubpath()函数。

QPainterPath myPath;
myPath.moveTo(center);
myPath.arcTo(boundingRect, startAngle,
             sweepLength);

QPainter painter(this);
painter.setBrush(myGradient);
painter.setPen(myPen);
painter.drawPath(myPath);

另请参阅arcMoveTo(),addEllipse(),QPainter::drawArc(),QPainter::drawPie(),以及Composing a QPainterPath

void QPainterPath::arcTo(qreal x, qreal y, qreal width, qreal height, qreal startAngle, qreal sweepLength)

这是一个重载函数。

创建一个占据矩形 QRectF(x, y, width, height) 的弧,起始于指定的 startAngle,并向逆时针方向延伸 sweepLength 度。

QRectF QPainterPath::boundingRect() const

返回该绘图路径的外接矩形,以浮点数精度表示。

另请参阅 controlPointRect

int QPainterPath::capacity() const

返回由 QPainterPath 分配的元素数量。

另请参阅 clear() 和 reserve

void QPainterPath::clear()

清除存储的路径元素。

这允许路径重新使用以前的内存分配。

另请参阅 reserve() 和 capacity

void QPainterPath::closeSubpath()

通过绘制一条线到子路径的开始处,关闭当前子路径,并自动开始一个新的路径。新路径的当前点是 (0, 0)。

如果子路径不包含任何元素,此函数不起作用。

另请参阅 moveTo() 和 组成 QPainterPath

void QPainterPath::connectPath(const QPainterPath &path)

通过从此路径的最后一个元素到给定路径的第一个元素添加一条线,将给定的 path 连接到此路径。

另请参阅 addPath() 和 组成 QPainterPath

bool QPainterPath::contains(const QPointF &point) const

如果给定的 point 在路径内部,则返回 true,否则返回 false

另请参阅 intersects

bool QPainterPath::contains(const QRectF &rectangle) const

如果给定的 rectangle 在路径内部,则返回 true,否则返回 false

bool QPainterPath::contains(const QPainterPath &p) const

如果给定的路径 p 在当前路径内部,则返回 true。如果当前路径和 p 的任意边相交,则返回 false

路径上的集合操作将路径视为区域。非封闭路径将被视为隐式封闭。

另请参阅 intersects

QRectF QPainterPath::controlPointRect() const

返回包含此路径中所有点和控制点的矩形。

此函数的计算速度显著快于精确的 boundingRect(),并且返回的矩形总是包含由 boundingRect() 返回的矩形。

另请参阅 boundingRect().

void QPainterPath::cubicTo(const QPointF &c1, const QPointF &c2, const QPointF &endPoint)

通过由 c1c2 指定的控制点,在当前位置和给定的 endPoint 之间添加一个三次贝塞尔曲线。

添加曲线后,当前位置更新为曲线的终点。

QLinearGradient myGradient;
QPen myPen;

QPainterPath myPath;
myPath.cubicTo(c1, c2, endPoint);

QPainter painter(this);
painter.setBrush(myGradient);
painter.setPen(myPen);
painter.drawPath(myPath);

另请参阅 quadTo() 及 合成 QPainterPath.

void QPainterPath::cubicTo(qreal c1X, qreal c1Y, qreal c2X, qreal c2Y, qreal endPointX, qreal endPointY)

这是一个重载函数。

通过指定控制点 (c1X, c1Y) 和 (c2X, c2Y),在当前位置和终点 (endPointX, endPointY) 之间添加一个三次贝塞尔曲线。

QPointF QPainterPath::currentPosition() const

返回路径的当前位置。

QPainterPath::Element QPainterPath::elementAt(int index) const

返回画家路径中给定 index 的元素。

另请参阅 ElementTypeelementCount() 和 isEmpty().

int QPainterPath::elementCount() const

返回画家路径中的路径元素数量。

另请参阅 ElementTypeelementAt() 和 isEmpty().

Qt::FillRule QPainterPath::fillRule() const

返回画家路径当前设定的填充规则。

另请参阅 setFillRule().

QPainterPath QPainterPath::intersected(const QPainterPath &p) const

返回一个路径,它是此路径的填充区域和 p 的填充区域的交集。由于贝塞尔曲线交叉的数值不稳定性,贝塞尔曲线可能被简化为线段。

bool QPainterPath::intersects(const QRectF &rectangle) const

如果给定 rectangle 中的任何点与路径相交,则返回 true;否则返回 false

如果有组成矩形的任意一条线段与路径的某一部分相交,或者矩形的任意一部分与路径所包围的任意区域重叠,则存在交点。此函数将尊重当前填充规则以确定路径内哪些内容被考虑在内。

另见:contains()。

bool QPainterPath::intersects(const QPainterPath &p) const

如果当前路径在任何点上与给定的路径p相交,则返回true。如果当前路径包含p的任何部分,或者当前路径被p的任何部分包含,则也返回true

路径上的集合操作将路径视为区域。非封闭路径将被视为隐式封闭。

另见:contains()。

bool QPainterPath::isEmpty() const

如果没有路径的元素,或者唯一的元素是MoveToElement,则返回true;否则返回false

另见:elementCount

qreal QPainterPath::length() const

返回当前路径的长度。

void QPainterPath::lineTo(const QPointF &endPoint)

从当前位置到给定的endPoint添加一条直线。绘制线条后,当前位置将更新为线条的终点。

另见:addPolygonaddRect创建 QPainterPath

void QPainterPath::lineTo(qreal x, qreal y)

这是一个重载函数。

从当前位置绘制到点(xy)的线条。

void QPainterPath::moveTo(const QPointF &point)

将当前位置移动到给定的point,隐式地开始一个新的子路径并关闭上一个子路径。

另见:closeSubpath创建 QPainterPath

void QPainterPath::moveTo(qreal x, qreal y)

这是一个重载函数。

将当前位置移动到(xy),并开始新的子路径,隐式地关闭先前路径。

qreal QPainterPath::percentAtLength(qreal len) const

返回在指定长度len处的整个路径的百分比。

注意,与其他百分比方法类似,如果有曲线存在于路径中,百分比与长度的测量不是线性关系。当存在曲线时,百分比参数映射为贝塞尔方程的t参数。

QPointF QPainterPath::pointAtPercent(qreal t) const

返回当前路径中对应百分比 t 的点。参数 t 必须在 0 和 1 之间。

注意,与其他百分比方法类似,如果有曲线存在于路径中,百分比与长度的测量不是线性关系。当存在曲线时,百分比参数映射为贝塞尔方程的t参数。

void QPainterPath::quadTo(const QPointF &c, const QPointF &endPoint)

在当前位置和指定的 endPoint 之间添加一个二次贝塞尔曲线,其控制点由 c 指定。

添加曲线后,当前位置更新为曲线的终点。

另请参阅cubicTo() 和 组合 QPainterPath

void QPainterPath::quadTo(qreal cx, qreal cy, qreal endPointX, qreal endPointY)

这是一个重载函数。

在当前位置和终点 (endPointX, endPointY) 之间添加一个二次贝塞尔曲线,其控制点由 (cx, cy) 指定。

void QPainterPath::reserve(int size)

为 QPainterPath 的内部内存预保留一定量的元素。

尝试为至少 size 个元素分配内存。

另请参阅clear(),capacity() 和 QList::reserve

void QPainterPath::setElementPositionAt(int index, qreal x, qreal y)

将索引为 index 的元素的 x 和 y 坐标设置为 xy

void QPainterPath::setFillRule(Qt::FillRule fillRule)

将画家路径的填充规则设置为给定的 fillRule。Qt 提供两种填充路径的方法

另请参阅fillRule

QPainterPath QPainterPath::simplified() const

返回路径的简化版本。这意味着合并所有相交的子路径,并返回一个不包含相交边线的路径。连续的平行线也将被合并。简化路径将始终使用默认的填充规则,Qt::OddEvenFill。由于贝塞尔曲线交点的数值稳定性不佳,贝塞尔曲线可能会被展平成线段。

qreal QPainterPath::slopeAtPercent(qreal t) const

返回路径在百分比 t 处的斜率。参数 t 必须在 0 和 1 之间。

注意,与其他百分比方法类似,如果有曲线存在于路径中,百分比与长度的测量不是线性关系。当存在曲线时,百分比参数映射为贝塞尔方程的t参数。

QPainterPath QPainterPath::subtracted(const QPainterPath &p) const

返回一个路径,它从本路径的填充区域减去p的填充区域。

路径上的组合操作将路径视为区域。非封闭路径将被隐式封闭。由于贝塞尔曲线相交的数值不稳定性,贝塞尔曲线可能会被展平为线段。

[noexcept] void QPainterPath::swap(QPainterPath &other)

交换画家路径other与本画家路径。此操作非常快速且从不失败。

QPolygonF QPainterPath::toFillPolygon(const QTransform &matrix = QTransform()) const

使用QTransform 矩阵将路径转换为多边形,并返回该多边形。

通过首先将所有子路径转换为多边形,然后使用重绕技术确保可以正确使用填充规则填充重叠的子路径来创建多边形。

请注意,重绕会在多边形中插入额外的线条,因此填充多边形的轮廓不匹配路径的轮廓。

另请参阅toSubpathPolygons()、toFillPolygons()和QPainterPath转换

QList<QPolygonF> QPainterPath::toFillPolygons(const QTransform &matrix = QTransform()) const

使用QTransform 矩阵将路径转换为多边形列表,并返回该列表。

该函数与toFillPolygon()函数的不同之处在于它创建多个多边形。这是因为通常绘制几个小多边形比绘制一个大多边形快,尽管绘制的总点数相同。

toFillPolygons()函数与toSubpathPolygons()函数的不同之处在于它只为具有重叠边界框的子路径创建多边形。

toFillPolygon()函数类似,此函数使用重绕技术确保可以使用正确的填充规则填充重叠的子路径。请注意,重绕会在多边形中插入额外的线条,因此填充多边形的轮廓不匹配路径的轮廓。

另请参阅toSubpathPolygons()、toFillPolygon()和QPainterPath转换

QPainterPath QPainterPath::toReversed() const

创建并返回路径的反转副本。

是元素的顺序被反转:如果QPainterPath是通过在指定顺序中调用moveTo()、lineTo()和cubicTo()函数来构成的,则反转副本是由调用cubicTo()、lineTo()和moveTo()来构成的。

QList<QPolygonF> QPainterPath::toSubpathPolygons(const QTransform &matrix = QTransform()) const

使用QTransform 矩阵将路径转换为多边形列表,并返回该列表。

此函数为每个子路径创建一个多边形,不考虑交叉的子路径(即重叠的边界矩形)。为确保重叠的子路径正确填充,请使用toFillPolygons()函数。

另请参阅 toFillPolygons(),toFillPolygon() 和 QPainterPath Conversion

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

将路径中的所有元素按(dxdy)平移。

另请参阅 translated

void QPainterPath::translate(const QPointF &offset)

这是一个重载函数。

将路径中的所有元素沿给定的offset平移。

另请参阅 translated

QPainterPath QPainterPath::translated(qreal dx, qreal dy) const

返回一个通过(dxdy)平移的路径副本。

另请参阅 translate

QPainterPath QPainterPath::translated(const QPointF &offset) const

这是一个重载函数。

返回一个通过给定的offset平移的路径副本。

另请参阅 translate

QPainterPath QPainterPath::united(const QPainterPath &p) const

返回一个路径,它是此路径填充区域与p的填充区域的并集。

路径上的组合操作将路径视为区域。非封闭路径将被隐式封闭。由于贝塞尔曲线相交的数值不稳定性,贝塞尔曲线可能会被展平为线段。

另请参阅 intersected() 和 subtracted

bool QPainterPath::operator!=(const QPainterPath &path) const

如果此画家路径与给定的path不同,则返回true

请注意,比较路径可能涉及每个元素的比较,对于复杂的路径,这可能很慢。

另请参阅 operator==

QPainterPath QPainterPath::operator&(const QPainterPath &other) const

返回此路径与other路径的交集。

另请参阅 intersected(),operator&=(),unitedoperator|

QPainterPath &QPainterPath::operator&=(const QPainterPath &other)

与此路径与other相交并返回对此路径的引用。

另请参阅intersected()、operator&()和operator|()。

QPainterPath QPainterPath::operator+(const QPainterPath &other) const

返回此路径与other路径的并集。此函数与operator|()等价。

另请参阅united()、operator+=()和operator-()。

QPainterPath &QPainterPath::operator+=(const QPainterPath &other)

将此路径与other合并,并返回对此路径的引用。这与operator|=()等价。

另请参阅united()、operator+()和operator-=()。

QPainterPath QPainterPath::operator-(const QPainterPath &other) const

从此路径的副本中减去other路径,并返回副本。

另请参阅subtracted()、operator-=()和operator+()。

QPainterPath &QPainterPath::operator-=(const QPainterPath &other)

从此路径中减去other,并返回对此路径的引用。

另请参阅subtracted()、operator-()和operator+=()。

QPainterPath &QPainterPath::operator=(const QPainterPath &path)

将给定的path分配给此画家路径。

另请参阅QPainterPath()。

[noexcept] QPainterPath &QPainterPath::operator=(QPainterPath &&other)

other移动分配到此QPainterPath实例。

bool QPainterPath::operator==(const QPainterPath &path) const

如果此画家路径等于给定的path,则返回true

请注意,比较路径可能涉及每个元素的比较,对于复杂的路径,这可能很慢。

另请参阅operator!=()。

QPainterPath QPainterPath::operator|(const QPainterPath &other) const

返回此路径与其他路径的并集。

另请参阅 united(),操作符 |=(),intersected() 和 操作符 &

QPainterPath &QPainterPath::operator|=(const QPainterPath &other)

将此路径与其他相合并,并返回对此路径的引用。

另请参阅united(),操作符 |操作符 &=

相关非成员

QDataStream &operator<<(QDataStream &stream, const QPainterPath &path)

将给定的画笔路径写入给定的,并返回对此流的引用。

另请参阅序列化 Qt 数据类型

QDataStream &operator>>(QDataStream &stream, QPainterPath &path)

从给定的中读取画笔路径到指定的路径,并返回对此流的引用。

另请参阅序列化 Qt 数据类型

© 2024 Qt 公司。此处包含的文档贡献具有各自所有者的版权。此处提供的文档根据 GNU 自由文档许可证版本 1.3 的条款发布,由自由软件基金会发布。Qt 和相应的标志是芬兰及其在全球的子公司和关联公司的商标。所有其他商标均为各自所有者的财产。