QPen类

QPen类定义了QPainter绘制线条和形状轮廓的方式。更多...

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

公共函数

QPen()
QPen(Qt::PenStyle style)
QPen(const QColor &color)
QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin)
QPen(const QPen &pen)
QPen(QPen &&pen)
~QPen()
QBrushbrush() const
Qt::PenCapStylecapStyle() const
QColorcolor() const
qrealdashOffset() const
QList<qreal>dashPattern() const
boolisCosmetic() const
boolisSolid() const
Qt::PenJoinStylejoinStyle() const
qrealmiterLimit() const
voidsetBrush(const QBrush &brush)
voidsetCapStyle(Qt::PenCapStyle style)
voidsetColor(const QColor &color)
voidsetCosmetic(bool cosmetic)
voidsetDashOffset(qreal offset)
voidsetDashPattern(const QList<qreal> &pattern)
voidsetJoinStyle(Qt::PenJoinStyle style)
voidsetMiterLimit(qreal limit)
voidsetStyle(Qt::PenStyle style)
voidsetWidth(int width)
voidsetWidthF(qreal width)
Qt::PenStylestyle() const
voidswap(QPen &other)
intwidth() const
qrealwidthF() const
QVariantoperator QVariant() const
booloperator!=(const QPen &pen) const
QPen &operator=(const QPen &pen)
QPen &operator=(QPen &&other)
bool运算符==(const QPen &) const
QDataStream &运算符<<(QDataStream &, const QPen &)
QDataStream &运算符>>(QDataStream &, QPen &)

详细描述

笔有样式()、宽度()、画笔()、端点样式()和连接样式()。

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

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

例如

QPainter painter(this);
QPen pen(Qt::green, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin);
painter.setPen(pen);

相当于

QPainter painter(this);
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枚举表示的内置样式

只需使用setStyle()函数将笔样式转换为内置样式之一(注意,Qt::CustomDashLine样式除外,我们很快会回来),将样式设置为Qt::NoPen告诉画家不要绘制线条或轮廓。默认笔样式是Qt::SolidLine

从Qt 4.1开始,还可能使用setDashPattern()函数指定自定义虚线模式,这会导致隐式地将笔样式转换为Qt::CustomDashLine。模式参数,即QList,必须指定为偶数个qreal条目,其中条目1、3、5...是虚线,而2、4、6...是空隙。例如,上述自定义模式是以以下代码创建的:

QPen pen;
QList<qreal> dashes;
qreal space = 4;

dashes << 1 << space << 3 << space << 9 << space
           << 27 << space << 9 << space;

pen.setDashPattern(dashes);

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

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

端点样式

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

Qt::SquareCap样式是覆盖端点并延伸至端点一半宽度的直线端点。《a href="qt.html#PenCapStyle-enum" translate="no">Qt::FlatCap样式是不覆盖线条端点的直线端点。而Qt::RoundCap样式是覆盖端点的圆弧线端点。

默认为Qt::SquareCap

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

连接样式

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

Qt::BevelJoin样式填充了两条线之间的三角形缺口。`Qt::MiterJoin`样式将线条延伸以满足角度。而`Qt::RoundJoin`样式填充了两条线之间的圆弧。

默认为Qt::BevelJoin

当应用`Qt::MiterJoin`样式时,可以使用setMiterLimit()函数指定接合点可以延伸多远。`miterLimit()`用于减少线条接合处的近似处的杂物。

miterLimit()必须以画笔宽度为单位指定,例如宽度为10时,接合极限为5表示50像素长。默认接合极限为2,即像素中画笔宽度的两倍。

The Path Stroking Example

Path Stroking示例显示了Qt的内置划线模式,并展示了如何使用自定义模式来扩展可用模式的范围。

另请参阅QPainterQBrushPath Stroking ExampleScribble Example

成员函数文档

QPen::QPen()

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

QPen::QPen(Qt::PenStyle style)

创建一个黑色画笔,宽度为1,并具有指定的style

另请参阅 setStyle

QPen::QPen(const QColor &color)

创建一个宽度为1的实线笔并具有指定的颜色。

另请参阅setBrush() 和 setColor()。

QPen::QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin)

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

另请参阅setBrush()、setWidth()、setStyle()、setCapStyle() 和 setJoinStyle()。

[noexcept] QPen::QPen(const QPen &pen)

构造一个复制给定的

[noexcept] QPen::QPen(QPen &&pen)

构造一个从给定的

分离出来的笔。

分离的笔只能被赋值、复制或销毁。任何其他操作(在赋值之前)都将导致未定义的行为。

[noexcept] QPen::~QPen()

销毁笔。

QBrush QPen::brush() const

返回用于填充使用此笔生成线条的笔刷。

另请参阅setBrush()。

Qt::PenCapStyle QPen::capStyle() const

返回笔的端点样式。

另请参阅setCapStyle() 和 Cap Style

QColor QPen::color() const

返回此笔刷的颜色。

另请参阅brush() 和 setColor()。

qreal QPen::dashOffset() const

返回笔的虚线偏移。

另请参阅setDashOffset()。

QList<qreal> QPen::dashPattern() const

返回此笔的虚线样式。

另请参阅setDashPattern()、style() 和 isSolid()。

bool QPen::isCosmetic() const

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

美容笔用于绘制无论对所使用的 QPainter 应用任何变换都保持恒定宽度的线条。使用美容笔绘制形状可确保其轮廓在不同缩放因子下具有相同的厚度。

默认情况下,宽度为零的笔是美容笔。

另请参阅setCosmetic() 和 widthF

bool QPen::isSolid() const

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

另请参阅style() 和 dashPattern

Qt::PenJoinStyle QPen::joinStyle() const

返回笔的连接样式。

另请参阅setJoinStyle() 和 连接样式

qreal QPen::miterLimit() const

返回笔的倒角限制。只有当连接样式设置为 Qt::MiterJoin 时,倒角限制才相关。

另请参阅setMiterLimit() 和 连接样式

void QPen::setBrush(const QBrush &brush)

将此笔生成的描边所使用的画笔设置为指定的 brush

另请参阅brush() 和 setColor()。

void QPen::setCapStyle(Qt::PenCapStyle style)

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

另请参阅capStyle() 和 端样式

void QPen::setColor(const QColor &color)

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

另请参阅setBrush() 和 颜色

void QPen::setCosmetic(bool cosmetic)

根据 cosmetic 的值将此笔设置为美容笔或非美容笔。

另请参阅isCosmetic

void QPen::setDashOffset(qreal offset)

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

例如,每个描边长度为四个单位,后面跟着两个单位的间隙的模式,将以描边开始绘制线条。

但是,如果虚线偏移设置为 4.0,则绘制的任何线条都将从间隙开始。偏移量为 4.0 以内将导致先绘制部分描边,偏移量在 4.0 和 6.0 之间将导致线条从部分间隙开始。

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

另请参阅dashOffset

void QPen::setDashPattern(const QList<qreal> &pattern)

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

图案必须指定为正数的偶数个条目,其中条目 1、3、5... 是划线,而 2、4、6... 是间隙。例如

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

虚线图案的单位是画笔的宽度;例如,长度为 5 的划线在 10 的宽度上为 50 像素长。请注意,宽度为零的画笔相当于宽度为 1 像素的装饰性画笔。

每个划线也受盖帽样式的影响,因此设置为方形盖帽的划线将在每个方向上延伸 0.5 像素,从而使得总宽度为 2。

请注意,默认盖帽样式为Qt::SquareCap,这意味着方线端点覆盖终点并延伸到终点之外线宽的一半。

另请参阅 setStyle()、dashPatternsetCapStylesetCosmetic

void QPen::setJoinStyle(Qt::PenJoinStyle style)

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

另请参阅 joinStyle()和连接样式

void QPen::setMiterLimit(qreal limit)

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

斜接限制描述了斜接连接可以延伸多远。这用于减少线连接处的伪影,其中线条几乎平行。

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

另请参阅 miterLimitsetJoinStyle连接样式

void QPen::setStyle(Qt::PenStyle style)

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

有关可用的样式列表,请参阅Qt::PenStyle文档。从 Qt 4.1 开始,也可以使用setDashPattern()函数指定自定义的划线图案,这将隐式地将画笔样式转换为Qt::CustomDashLine

注意:此函数将划线偏移量重置为零。

另请参阅 style笔样式

void QPen::setWidth(int width)

以像素为单位以整数精度设置画笔宽度为给定的width

线条宽度为零表示装饰性笔。这意味着笔宽度始终绘制为单像素宽度,不受画家设置的变换的影响。

不支持将笔宽度设置为负值。

另请参阅 setWidthF() 和 width()。

void QPen::setWidthF(qreal width)

将笔宽度设置为给定的宽度像素值,具有浮点精度。

线条宽度为零表示装饰性笔。这意味着笔宽度始终绘制为单像素宽度,不受画家上的变换影响。

不支持将笔宽度设置为负值。

另请参阅 setWidth() 和 widthF()。

Qt::PenStyle QPen::style() const

返回笔样式。

另请参阅 setStyle() 和 笔样式

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

将该笔与另一笔交换。此操作非常快,绝不会失败。

int QPen::width() const

以整数值返回笔宽度。

另请参阅 setWidth() 和 widthF()。

qreal QPen::widthF() const

以浮点精度返回笔宽度。

另请参阅 setWidthF() 和 width()。

QVariant QPen::operator QVariant() const

将笔作为QVariant返回。

bool QPen::operator!=(const QPen &pen) const

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

另请参阅 operator==

[noexcept] QPen &QPen::operator=(const QPen &pen)

将给定的赋值到此笔,并返回对此笔的引用。

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

other移动分配到该QPen实例。

bool QPen::operator==(const QPen &pen) const

如果笔与给定相等,则返回 true;否则返回 false。如果两个笔的样式、宽度以及颜色都相等,则它们是相等的。

另请参阅 operator!=

相关非成员函数

QDataStream &operator<<(QDataStream &stream, const QPen &pen)

将给定的写入给定的并返回该的引用。

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

QDataStream &operator>>(QDataStream &stream, QPen &pen)

从给定的中读取笔到给定的,并返回该的引用。

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

© 2024 Qt公司。此处包含的文档贡献归其各自的拥有者所有。此处提供的文档是在自由软件基金会出版的GNU自由文档许可第1.3版的条款下授权的。Qt和其相关标志是芬兰和/或其他国家的Qt公司的商标。所有其他商标均为其各自所有者的财产。