PySide6.QtGui.QPen

class QPen

QPen 类定义了 QPainter 应该如何绘制线条和形状的轮廓。更多

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

一支笔有style()width()brush()capStyle()joinStyle()

笔样式定义了线条类型。画笔用于填充由笔生成的描边。使用QBrush类来指定填充样式。帽样式决定了可以使用QPainter绘制的线端帽,而连接样式描述了两条线之间的连接如何绘制。笔的宽度可以以整数(width())和浮点数(widthF())精度指定。线宽为零表示装饰笔。这意味着笔宽始终绘制为一像素宽,与画师设置的transformation无关。

可以使用相应的setStyle()setWidth()setBrush()setCapStyle()setJoinStyle()函数轻松修改各种设置(请注意,在更改画笔属性时必须重置画家的画笔)。

例如:

painter = QPainter(self)
pen = QPen(Qt.green, 3, Qt.DashDotLine, Qt.RoundCap, Qt.RoundJoin)
painter.setPen(pen)

这相当于

painter = QPainter(self)
QPen pen # creates a default pen
pen.setStyle(Qt.DashDotLine)
pen.setWidth(3)
pen.setBrush(Qt.green)
pen.setCapStyle(Qt.RoundCap)
pen.setJoinStyle(Qt.RoundJoin)
painter.setPen(pen)

默认的画笔是一个宽度为1的实心黑色画笔,具有方形端点样式(Qt::SquareCap)和斜角连接样式(Qt::BevelJoin)。

此外,QPen 提供了 color()setColor() 便利函数,分别用于提取和设置画笔的颜色。画笔也可以进行比较和流式处理。

有关绘画的更多信息,请参阅Paint System文档。

笔样式

Qt 提供了几种内置样式,由 Qt::PenStyle 枚举表示:

qpen-dot3

qpen-dot3

qpen-dot3

Qt::SolidLine

Qt::DashLine

Qt::DotLine

qpen-custom6

qpen-custom6

qpen-custom6

Qt::DashDotLine

Qt::DashDotDotLine

Qt::CustomDashLine

只需使用setStyle()函数将笔样式转换为内置样式之一,除了我们稍后会提到的Qt::CustomDashLine样式。将样式设置为Qt::NoPen告诉画师不要绘制线条或轮廓。默认的笔样式是Qt::SolidLine。

自 Qt 4.1 起,还可以使用 setDashPattern() 函数指定自定义的虚线模式,该函数隐式地将笔的样式转换为 Qt::CustomDashLine。模式参数,一个 QList,必须指定为偶数个 qreal 条目,其中条目 1, 3, 5… 是虚线,2, 4, 6… 是空格。例如,上面显示的自定义模式是使用以下代码创建的:

pen = QPen()
dashes = QList()
space = 4
dashes << 1 << space << 3 << space << 9 << space
           << 27 << space << 9 << space
pen.setDashPattern(dashes)

请注意,虚线模式是以笔宽的单位指定的,例如,宽度为10的长度为5的虚线长度为50像素。

可以使用dashPattern()函数检索当前设置的虚线模式。使用isSolid()函数来确定笔是否具有实心填充。

帽样式

线帽样式定义了使用QPainter绘制线条端点的方式。线帽样式仅适用于宽线条,即当宽度为1或更大时。Qt::PenCapStyle枚举提供了以下样式:

qpen-roundcap9

qpen-roundcap9

qpen-roundcap9

Qt::SquareCap

Qt::FlatCap

Qt::RoundCap

Qt::SquareCap 样式是一个方形线端,它覆盖端点并超出端点一半线宽。Qt::FlatCap 样式是一个方形线端,不覆盖线的端点。而 Qt::RoundCap 样式是一个圆形线端,覆盖端点。

默认是 Qt::SquareCap。

当笔宽为0或1时,是否绘制端点取决于帽样式。使用Qt::SquareCap或Qt::RoundCap时会绘制端点,使用Qt::FlatCap时则不会绘制。

连接样式

连接样式定义了如何使用QPainter绘制两条连接线之间的连接。连接样式仅适用于宽线,即当宽度为1或更大时。Qt::PenJoinStyle枚举提供了以下样式:

qpen-roundjoin12

qpen-roundjoin12

qpen-roundjoin12

Qt::BevelJoin

Qt::MiterJoin

Qt::RoundJoin

Qt::BevelJoin 样式填充两条线之间的三角形缺口。Qt::MiterJoin 样式延伸两条线以在角度处相交。而 Qt::RoundJoin 样式则填充两条线之间的圆弧。

默认是 Qt::BevelJoin。

../../_images/qpen-miterlimit.png

当应用Qt::MiterJoin样式时,可以使用setMiterLimit()函数来指定斜接连接可以从连接点延伸多远。miterLimit()用于减少线条接近平行时线条连接之间的伪影。

miterLimit() 必须以笔宽的单位指定,例如,宽度为10的斜接限制为5,长度为50像素。默认的斜接限制为2,即笔宽的两倍像素。

qpen-demo13

路径描边示例

路径描边示例展示了Qt内置的虚线模式,并展示了如何使用自定义模式来扩展可用模式的范围。

另请参阅

QPainter QBrush Path Stroking ExampleScribble Example

__init__()

构造一个默认的黑色实线笔,宽度为1。

__init__(style)
Parameters:

样式PenStyle

构造一个宽度为1且具有给定style的黑色笔。

另请参阅

setStyle()

__init__(color)
Parameters:

颜色QColor

构造一个宽度为1且具有给定color的实线笔。

另请参阅

setBrush() setColor()

__init__(pen)
Parameters:

QPen

构造一个与给定pen相同的笔。

__init__(brush, width[, s=Qt.SolidLine[, c=Qt.SquareCap[, j=Qt.BevelJoin]]])
Parameters:

使用指定的brushwidth、笔的stylecap样式和join样式构造一支笔。

brush()
Return type:

QBrush

返回用于填充此笔生成的描边的画笔。

另请参阅

setBrush()

capStyle()
Return type:

PenCapStyle

返回笔的帽样式。

另请参阅

setCapStyle() Cap Style

color()
Return type:

QColor

返回此画笔的笔刷颜色。

另请参阅

brush() setColor()

dashOffset()
Return type:

浮点数

返回笔的虚线偏移量。

另请参阅

setDashOffset()

dashPattern()
Return type:

.qreal列表

返回此画笔的虚线模式。

isCosmetic()
Return type:

布尔

如果笔是装饰性的,则返回true;否则返回false

化妆笔用于绘制无论应用于QPainter的任何变换都具有恒定宽度的笔画。使用化妆笔绘制形状可以确保其轮廓在不同比例因子下具有相同的厚度。

默认情况下,零宽度笔是装饰性的。

另请参阅

setCosmetic() widthF()

isSolid()
Return type:

布尔

如果笔具有实心填充,则返回true,否则返回false。

另请参阅

style() dashPattern()

joinStyle()
Return type:

PenJoinStyle

返回笔的连接样式。

另请参阅

setJoinStyle() 连接 样式

miterLimit()
Return type:

浮点数

返回笔的斜接限制。斜接限制仅在连接样式设置为Qt::MiterJoin时相关。

另请参阅

setMiterLimit() 连接 样式

__ne__(p)
Parameters:

pQPen

Return type:

布尔

如果笔与给定的pen不同,则返回true;否则返回false。如果两支笔的样式、宽度或颜色不同,则它们不同。

另请参阅

operator==()

__eq__(p)
Parameters:

pQPen

Return type:

布尔

如果笔等于给定的pen,则返回true;否则返回false。如果两支笔具有相同的样式、宽度和颜色,则它们相等。

另请参阅

operator!=()

setBrush(brush)
Parameters:

画笔QBrush

设置用于填充此笔生成的描边的画笔为给定的brush

另请参阅

brush() setColor()

setCapStyle(pcs)
Parameters:

pcsPenCapStyle

将笔的帽样式设置为给定的style。默认值为Qt::SquareCap。

另请参阅

capStyle() Cap 样式

setColor(color)
Parameters:

颜色QColor

将此画笔的颜色设置为给定的 color

另请参阅

setBrush() color()

setCosmetic(cosmetic)
Parameters:

cosmetic – 布尔值

根据cosmetic的值,将此笔设置为装饰性或非装饰性。

另请参阅

isCosmetic()

setDashOffset(doffset)
Parameters:

doffset – 浮点数

设置此笔的虚线偏移量(虚线图案上的起点)为指定的offset。偏移量以用于指定虚线图案的单位进行测量。

qpen-dashpattern1

例如,一个模式中,每个笔画长度为四个单位,随后是两个单位的间隔,当绘制为线条时,将从笔画开始。

然而,如果虚线偏移量设置为4.0,任何绘制的线条将从间隔开始。偏移量值小于4.0将导致部分笔画首先绘制,而偏移量值在4.0到6.0之间将导致线条从部分间隔开始。

注意

这隐式地将笔的样式转换为Qt::CustomDashLine。

另请参阅

dashOffset()

setDashPattern(pattern)
Parameters:

pattern – qreal的列表

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

将此笔的虚线模式设置为给定的pattern。这会隐式地将笔的样式转换为Qt::CustomDashLine。

模式必须指定为偶数个正数条目,其中条目1、3、5…是破折号,条目2、4、6…是空格。例如:

qpen-custom1

pen = QPen()
dashes = QList()
space = 4
dashes << 1 << space << 3 << space << 9 << space
           << 27 << space << 9 << space
pen.setDashPattern(dashes)

虚线模式以笔宽的单位指定;例如,宽度为10的5长度虚线是50像素长。请注意,宽度为零的笔相当于宽度为1像素的装饰笔。

每个虚线也受到端点样式的影响,因此设置为方形端点的1像素虚线将在每个方向上延伸0.5像素,导致总宽度为2。

请注意,默认的线帽样式是Qt::SquareCap,这意味着方形线帽会覆盖端点并超出端点一半的线宽。

setJoinStyle(pcs)
Parameters:

pcsPenJoinStyle

将笔的连接样式设置为给定的style。默认值为Qt::BevelJoin。

另请参阅

joinStyle() 连接 样式

setMiterLimit(limit)
Parameters:

limit – 浮点数

将此笔的斜接限制设置为给定的limit

../../_images/qpen-miterlimit.png

斜接限制描述了斜接连接可以从连接点延伸多远。这用于减少线条接近平行时线条连接之间的伪影。

此值仅在笔样式设置为Qt::MiterJoin时有效。该值以笔宽的单位指定,例如,宽度为10的斜接限制为5,则长度为50像素。默认的斜接限制为2,即笔宽的两倍(以像素为单位)。

另请参阅

miterLimit() setJoinStyle() Join Style

setStyle(style)
Parameters:

样式PenStyle

将笔样式设置为给定的 style

请参阅Qt::PenStyle文档以获取可用样式的列表。自Qt 4.1起,还可以使用setDashPattern()函数指定自定义虚线模式,该函数隐式将笔的样式转换为Qt::CustomDashLine。

注意

此函数将虚线偏移重置为零。

另请参阅

style() Pen 样式

setWidth(width)
Parameters:

width – 整数

将笔的宽度设置为给定的width像素,精度为整数。

线宽为零表示使用装饰笔。这意味着无论画家的transformation设置如何,笔宽始终绘制为一像素宽。

不支持设置负值的笔宽。

另请参阅

setWidthF() width()

setWidthF(width)
Parameters:

width – 浮点数

将笔的宽度设置为给定的width,以像素为单位,具有浮点精度。

线宽为零表示使用装饰笔。这意味着无论画家的transformation如何,笔宽始终绘制为一像素宽。

不支持设置负值的笔宽。

另请参阅

setWidth() widthF()

style()
Return type:

PenStyle

返回笔的样式。

另请参阅

setStyle() Pen 样式

swap(other)
Parameters:

其他QPen

将笔 other 与此笔交换。此操作非常快速且永远不会失败。

width()
Return type:

整数

返回具有整数精度的笔宽。

另请参阅

setWidth() widthF()

widthF()
Return type:

浮点数

返回具有浮点精度的笔宽。

另请参阅

setWidthF() width()