QPen Class
QPen 类定义了QPainter 应如何绘制线条和图形轮廓。更多
头文件: | #include <QPen> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
- 所有成员(包括继承成员)的列表
- QPen 属于绘画类和隐式共享 类。
公共函数
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() | |
QBrush | brush() const |
Qt::PenCapStyle | capStyle() const |
QColor | color() const |
qreal | dashOffset() const |
QList<qreal> | dashPattern() const |
bool | isCosmetic() const |
bool | isSolid() const |
Qt::PenJoinStyle | joinStyle() const |
qreal | miterLimit() const |
void | setBrush(const QBrush &brush) |
void | setCapStyle(Qt::PenCapStyle style) |
void | setColor(const QColor &color) |
void | setCosmetic(bool cosmetic) |
void | setDashOffset(qreal offset) |
void | setDashPattern(const QList<qreal> &pattern) |
void | setJoinStyle(Qt::PenJoinStyle style) |
void | setMiterLimit(qreal limit) |
void | setStyle(Qt::PenStyle style) |
void | setWidth(int width) |
void | setWidthF(qreal width) |
Qt::PenStyle | style() const |
void | swap(QPen &other) |
int | width() const |
qreal | widthF() const |
QVariant | operator QVariant() const |
bool | operator!=(const QPen &pen) const |
QPen & | operator=(QPen &&other) |
QPen & | operator=(const QPen &pen) |
bool | operator==(const QPen &pen) const |
相关非成员
QDataStream & | operator<<(QDataStream &stream, const QPen &pen) |
QDataStream & | operator>>(QDataStream &stream, QPen &pen) |
详细描述
一支笔有style(),width(),brush(),capStyle() 和joinStyle() 。
钢笔样式定义线条类型。笔刷用于填充用钢笔生成的笔画。使用QBrush 类指定填充样式。笔帽样式决定了可以使用QPainter 绘制的线条端盖,而连接样式描述了如何绘制两条线条之间的连接。笔宽可以整数 (width()) 和浮点 (widthF()) 精度指定。线宽为 0 表示笔为整数。这意味着笔宽始终为一个像素宽,与绘制器上设置的transformation 无关。
使用相应的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() 方便函数,分别用于提取和设置笔刷的颜色。笔还可以进行比较和流式处理。
有关绘画的更多信息,请参阅 "绘画系统"文档。
笔的样式
Qt XML 提供了几种由Qt::PenStyle 枚举表示的内置样式:
只需使用setStyle() 函数,就能将笔的样式转换为任何一种内置样式,但Qt::CustomDashLine 样式除外,我们稍后将讨论该样式。将样式设置为Qt::NoPen 时,画笔将不绘制线条或轮廓。默认的钢笔样式是Qt::SolidLine 。
自 Qt 4.1 起,还可以使用setDashPattern() 函数指定自定义破折号样式,该函数会将画笔样式隐式转换为Qt::CustomDashLine 。样式参数 aQList 必须指定为偶数个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);
请注意,破折号模式是以笔宽度为单位指定的,例如宽度为 10 的破折号长度为 5,长度为 50 像素。
可以使用dashPattern() 函数检索当前设置的破折号图案。使用isSolid() 函数可确定钢笔是否为实心填充。
笔帽样式
上限样式定义了如何使用QPainter 绘制线条的端点。上限样式仅适用于宽线条,即宽度为 1 或更大的线条。Qt::PenCapStyle 枚举提供了以下样式:
Qt::SquareCap 样式是一个方形线端,覆盖端点并超出线宽的一半。Qt::FlatCap 样式是方形线端,不覆盖行的端点。Qt::RoundCap 样式是一个覆盖端点的圆形线端。
默认为Qt::SquareCap 。
当笔宽为 0 或 1 时,是否绘制端点取决于笔帽样式。使用Qt::SquareCap 或Qt::RoundCap 会绘制端点,使用Qt::FlatCap 则不会绘制端点。
连接样式
连接样式定义了如何使用QPainter 绘制两条连接线之间的连接。连接样式仅适用于宽线条,即宽度为 1 或更大的线条。Qt::PenJoinStyle 枚举提供了以下样式:
Qt::BevelJoin 样式填充两条直线之间的三角形凹槽。Qt::MiterJoin 样式将线条扩展到一个角度。Qt::RoundJoin 样式在两条直线之间填充圆弧。
默认值为Qt::BevelJoin 。
应用Qt::MiterJoin 样式时,可以使用setMiterLimit() 函数来指定从连接点到拼接点的距离。miterLimit() 用于减少线条接近平行的线条连接之间的假象。
miterLimit() 必须以笔宽度为单位指定,例如宽度为 10 的斜切限值为 5,长度为 50 像素。默认的斜线限制为 2,即笔宽度的两倍(以像素为单位)。
![]() | 路径描边示例 路径描边示例显示了 Qt 的内置破折号图案,并展示了如何使用自定义图案来扩展可用图案的范围。 |
另请参阅 QPainter,QBrush,Path Stroking 示例和Scribble 示例。
成员函数文档
QPen::QPen()
创建宽度为 1 的默认黑色实线钢笔。
QPen::QPen(Qt::PenStyle style)
构造一支黑色钢笔,宽度为 1,给定值为style 。
另请参见 setStyle().
QPen::QPen(const QColor &color)
构造宽度为 1 的实线钢笔,给定color 。
QPen::QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin)
用指定的brush,width, penstyle,cap 样式和join 样式构造钢笔。
另请参阅 setBrush(),setWidth(),setStyle(),setCapStyle() 和setJoinStyle().
[noexcept]
QPen::QPen(const QPen &pen)
构造一支笔,它是给定pen 的副本。
[noexcept]
QPen::QPen(QPen &&pen)
构造一支从给定pen 移动过来的笔。
被移动的笔只能被赋值、复制或销毁。任何其他操作(在赋值之前)都会导致未定义的行为。
[noexcept]
QPen::~QPen()
摧毁钢笔
QBrush QPen::brush() const
返回用于填充该笔生成的笔画的笔刷。
另请参阅 setBrush()。
Qt::PenCapStyle QPen::capStyle() const
返回笔帽样式。
另请参阅 setCapStyle() 和Cap Style 。
QColor QPen::color() const
返回笔刷的颜色。
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() 和Join Style 。
qreal QPen::miterLimit() const
返回钢笔的斜切限值。仅当连接样式设置为Qt::MiterJoin 时,斜切限位才会相关。
另请参阅 setMiterLimit() 和Join Style 。
void QPen::setBrush(const QBrush &brush)
将用于填充用这支笔生成的笔画的笔刷设置为给定的brush 。
void QPen::setCapStyle(Qt::PenCapStyle style)
将笔帽样式设置为给定的style 。默认值为Qt::SquareCap 。
void QPen::setColor(const QColor &color)
将此笔的笔刷颜色设置为给定的color 。
void QPen::setCosmetic(bool cosmetic)
根据cosmetic 的值,将这支笔设置为化妆品或非化妆品。
另请参阅 isCosmetic() 。
void QPen::setDashOffset(qreal offset)
将此笔的破折号偏移量(破折号图案的起点)设置为指定的offset 。偏移量以用于指定破折号图案的单位来衡量。
![]() | 例如,一个图案的每个笔画长度为 4 个单位,后面有 2 个单位的间隙,绘制成直线时将从笔画开始。 但是,如果将破折号偏移设置为 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...... 为空格。例如
![]() |
破折号模式以笔的宽度为单位指定;例如,宽度为 10 的破折号长度为 5,长度为 50 像素。请注意,宽度为 0 的笔相当于宽度为 1 像素的化妆笔。
每个破折号还受笔帽样式的影响,因此,一个长度为 1 的破折号,如果设置了方形笔帽,则会向每个方向延伸 0.5 个像素,总宽度为 2。
请注意,默认的上限样式是Qt::SquareCap ,这意味着正方形线端覆盖端点,并超出线宽的一半。
另请参见 setStyle()、dashPattern()、setCapStyle() 和setCosmetic()。
void QPen::setJoinStyle(Qt::PenJoinStyle style)
将钢笔的连接样式设置为给定的style 。默认值为Qt::BevelJoin 。
另请参阅 joinStyle() 和Join Style 。
void QPen::setMiterLimit(qreal limit)
将此笔的斜切限位设置为给定的limit 。
斜切限值描述了斜切连接从连接点可以延伸多远。它用于减少线条接近平行时线条连接之间的伪影。
该值只有在钢笔样式设置为Qt::MiterJoin 时才有效。该值以钢笔宽度为单位指定,例如宽度为 10 的斜切限值为 5,长度为 50 像素。默认的斜线限制为 2,即笔宽度的两倍(以像素为单位)。
另请参阅 miterLimit()、setJoinStyle() 和Join Style 。
void QPen::setStyle(Qt::PenStyle style)
将钢笔样式设置为给定的style 。
有关可用样式的列表,请参阅Qt::PenStyle 文档。自 Qt XML 4.1 起,还可以使用setDashPattern() 函数指定自定义的破折号样式,该函数会将钢笔样式隐式转换为Qt::CustomDashLine 。
注意: 该函数将破折号偏移重置为零。
void QPen::setWidth(int width)
以整数精度将钢笔宽度设置为给定的width (像素)。
线宽为 0 时,表示画笔是整洁的。这意味着笔宽始终为一个像素宽度,与绘制器上设置的transformation 无关。
不支持设置负值的笔宽。
void QPen::setWidthF(qreal width)
以浮点精度将笔宽度设置为给定的width (像素)。
线宽为 0 时,表示画笔是整洁的。这意味着画笔宽度始终为一个像素宽,与画板上的transformation 无关。
不支持设置负值的笔宽。
Qt::PenStyle QPen::style() const
返回钢笔样式。
[noexcept]
void QPen::swap(QPen &other)
将这支笔与other 互换。这一操作非常快速,而且从未出现过故障。
int QPen::width() const
以整数精度返回笔宽。
qreal QPen::widthF() const
以浮点精度返回笔宽。
QVariant QPen::operator QVariant() const
以QVariant 的形式返回钢笔。
bool QPen::operator!=(const QPen &pen) const
如果笔与给定的pen 不同,则返回true
;否则返回 false。如果两支笔的样式、宽度或颜色不同,则它们是不同的。
另请参见 operator==()。
[noexcept]
QPen &QPen::operator=(QPen &&other)
Move-assignsother 到此QPen 实例。
[noexcept]
QPen &QPen::operator=(const QPen &pen)
将给定的pen 分配给这支笔,并返回对这支笔的引用。
bool QPen::operator==(const QPen &pen) const
如果笔等于给定的pen ,则返回true
;否则返回 false。如果两支笔的样式、宽度和颜色相同,则它们相等。
另请参阅 operator!=()。
相关非会员
QDataStream &operator<<(QDataStream &stream, const QPen &pen)
将给定的pen 写入给定的stream ,并返回对stream 的引用。
另请参阅 序列化 Qt 数据类型。
QDataStream &operator>>(QDataStream &stream, QPen &pen)
将一支笔从给定的stream 读入给定的pen ,并返回对stream 的引用。
另请参阅 序列化 Qt 数据类型。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.