class QPen#

QPen 定义了如何对形状的线条和外框进行绘制。 更多

摘要#

方法#

注意

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

详细描述#

警告

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

笔具有 style()width()brush()capStyle()joinStyle() 等属性。

笔刷风格定义了线条类型。画笔用于填充由笔产生的线条。使用QBrush类来指定填充风格。端点样式决定了可以使用QPainter绘制的线条端点类型,而连接样式描述了绘制两条线条之间的连接方式。笔的宽度可以用整数(《width()》)和小数点(《widthF()》)精度来指定。线宽为零表示这是一支装饰性笔。这意味着笔的宽度总是绘制为一像素宽,独立于在画家上设置的任何转换。

可以通过相应的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()便利函数来分别提取和设置笔刷的颜色。笔也可以进行比较和流式传输。

有关绘制的一般信息,请参阅绘制系统文档。

笔刷样式#

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

qpen-solid1

qpen-dash2

qpen-dot3

Qt::SolidLine

Qt::DashLine

Qt::DotLine

qpen-dashdot4

qpen-dashdotdot5

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-square7

qpen-flat8

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-bevel10

qpen-miter11

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 路径 描边 示例Scribble 示例

__init__(arg__1)#
参数:

arg__1PenStyle

构建一个1像素宽度的黑色画笔,并设置给定的样式

另请参见

setStyle()

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

构建一个具有指定的画刷宽度、画笔样式端点样式连接样式的画笔。

__init__(color)
参数:

colorQColor

构建一个1像素宽度的填充固定颜色画笔。

另请参见

setBrush() setColor()

__init__(pen)
参数:

penQPen

创建一个与给定 pen 相同的笔。

__init__()

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

brush()#
返回类型:

QBrush

返回使用此笔创建的描边所用的填充画刷。

另请参见

setBrush()

capStyle()#
返回类型:

PenCapStyle

返回笔的帽样式。

另请参见

setCapStyle() Cap Style

color()#
返回类型:

QColor

返回此笔刷的颜色。

另请参见

brush() setColor()

dashOffset()#
返回类型:

float

返回笔的虚线偏移量。

另请参见

setDashOffset()

dashPattern()#
返回类型:

.list of qreal

返回此笔的虚线模式。

isCosmetic()#
返回类型:

bool

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

装饰性笔用于绘制在与 QPainter 一起使用时不受任何变换影响的线条。使用装饰性笔绘制形状可以确保其轮廓在不同比例因子下具有相同的厚度。

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

另请参见

setCosmetic() widthF()

isSolid()#
返回类型:

bool

返回true 表示笔具有实心填充,否则返回 false。

另请参见

style() dashPattern()

joinStyle()#
返回类型:

PenJoinStyle

返回笔的连接样式。

另请参见

setJoinStyle() Join Style

miterLimit()#
返回类型:

float

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

另请参见

setMiterLimit() Join Style

__ne__(p)#
参数:

pQPen

返回类型:

bool

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

另请参见

operator==()

__eq__(p)#
参数:

pQPen

返回类型:

bool

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

另请参见

operator!=()

setBrush(brush)#
参数:

brushQBrush

将使用该笔生成线划的填充所用的画刷设置为给定的 brush

另请参见

brush() setColor()

setCapStyle(pcs)#
参数:

pcsPenCapStyle

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

另请参见

capStyle() 榫头样式

setColor(color)#
参数:

colorQColor

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

另请参见

setBrush() color()

setCosmetic(cosmetic)#
参数:

cosmetic – 布尔型

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

另请参见

isCosmetic()

setDashOffset(doffset)#
参数:

doffset – 浮点数

将此笔的虚线偏移(虚线模式中的起始点)设置为指定的 offset。偏移以指定虚线模式的单位来衡量。

qpen-dashpattern1

例如,一个由每个划痕长四个单位,随后是两个单位的间隙组成的模式,在绘制为线条时将从头开始划痕。

但是,如果虚线偏移设置为4.0,则绘制的任何线条都将从间隙开始。偏移量大于等于4.0将导致划痕的一部分先被绘出,而偏移量在4.0到6.0之间将使线条从间隙的一部分开始。

注意

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

另请参见

dashOffset()

setDashPattern(pattern)#
参数:

pattern – .的实值列表

警告

本节包含从 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像素的装饰性笔。

每个划痕也受到榫头样式的约束,因此具有方形榫头的划痕将延伸0.5像素到每个方向,从而总宽度为2。

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

setJoinStyle(pcs)#
参数:

pcsPenJoinStyle

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

另请参见

joinStyle() Join Style

setMiterLimit(limit)#
参数:

limit – float

将此画笔的削角限制设置为指定的limit

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

削角限制描述了削角连接可以从连接点延伸多远。这用于减少当线条几乎平行时的线段连接处出现的伪像。

此值仅在画笔样式设置为Qt::MiterJoin时有效。此值以画笔宽度的单位指定,例如,宽度为10的画笔中的削角限制为5是50个像素长。默认削角限制为2,即像素宽度的两倍。

另请参见

miterLimit() setJoinStyle() Join Style

setStyle(arg__1)#
参数:

arg__1PenStyle

将画笔样式设置为指定的style

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

注意

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

另请参见

style() Pen Style

setWidth(width)#
参数:

width – int

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

线条宽度为零表示装饰用笔。这意味着笔宽度总是绘制为一个像素宽,不依赖于画家上设置的 transformation

不支持设置带负值的笔宽度。

另请参见

setWidthF() width()

setWidthF(width)#
参数:

width – float

使用浮点精度将笔宽度设置为给定的 width 像素值。

线条宽度为零表示装饰用笔。这意味着笔宽度总是绘制为一个像素宽,不依赖于画家上设置的 transformation

不支持设置带负值的笔宽度。

另请参见

setWidth() widthF()

style()#
返回类型:

PenStyle

返回笔样式。

另请参见

setStyle() Pen Style

swap(other)#
参数:

otherQPen

将笔 other 与此笔交换。此操作非常快,而且绝对不会失败。

width()#
返回类型:

int

以整数精度返回笔宽度。

另请参见

setWidth() widthF()

widthF()#
返回类型:

float

以浮点精度返回笔宽度。

另请参见

setWidthF() width()