QPen是 Qt 框架中用于定义线条绘制样式的类,主要配合QPainter使用,控制所绘图形轮廓(如线条、多边形边框等)的外观。其成员构成可分为以下几个方面:
一、核心属性(可通过 getter/setter 访问)
| 属性 | 获取函数 | 设置函数 | 说明 |
|---|---|---|---|
| 颜色 | color() | setColor(const QColor &) | 实际上是笔刷(brush)的颜色快捷方式 |
| 笔刷 | brush() | setBrush(const QBrush &) | 控制线条填充内容(支持渐变、纹理等) |
| 线宽 | width()/widthF() | setWidth(int)/setWidthF(qreal) | 整数或浮点精度的线宽;0 表示“ cosmetic pen”(始终 1 像素) |
| 线型 | style() | setStyle(Qt::PenStyle) | 如Qt::SolidLine,Qt::DashLine,Qt::DotLine,Qt::CustomDashLine等 |
| 端点样式 | capStyle() | setCapStyle(Qt::PenCapStyle) | 如Qt::FlatCap,Qt::SquareCap,Qt::RoundCap |
| 连接样式 | joinStyle() | setJoinStyle(Qt::PenJoinStyle) | 如Qt::BevelJoin,Qt::MiterJoin,Qt::RoundJoin |
| 斜接限制 | miterLimit() | setMiterLimit(qreal) | 控制Qt::MiterJoin的最大长度 |
| 虚线偏移 | dashOffset() | setDashOffset(qreal) | 自定义虚线起始偏移量 |
| 虚线模式 | dashPattern() | setDashPattern(const QList<qreal> &) | 定义交替的“划-空”序列(单位为线宽) |
| 是否为 Cosmetic Pen | isCosmetic() | setCosmetic(bool) | 若为 true,则线宽不受变换(如缩放)影响 |
二、构造函数
QPen(); // 默认:黑色、宽度1、实线、SquareCap、BevelJoin 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); // 移动构造(C++11)三、其他成员函数
bool isSolid() const:判断是否为实线(非虚线/点线等)void swap(QPen &other):高效交换两个QPen对象operator QVariant() const:支持转换为QVariant- 比较运算符:
operator==,operator!= - 赋值运算符(包括 C++23/Qt6.9 新增的):
operator=(QColor)operator=(Qt::PenStyle)
四、相关非成员函数(用于序列化)
QDataStream &operator<<(QDataStream &stream, const QPen &pen); QDataStream &operator>>(QDataStream &stream, QPen &pen);五、默认值总结
- 颜色:黑色(
Qt::black) - 宽度:1
- 样式:
Qt::SolidLine - 端点样式:
Qt::SquareCap - 连接样式:
Qt::BevelJoin - 笔刷:纯色黑色(与颜色一致)
- Cosmetic:false(但宽度为 0 时行为等效于 cosmetic)
六、使用示例
QPainter painter(this); QPen pen(Qt::red, 2, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin); painter.setPen(pen); painter.drawLine(10, 10, 100, 100);或分步设置:
QPen pen; pen.setColor(Qt::blue); pen.setWidth(3); pen.setStyle(Qt::DotLine); pen.setCapStyle(Qt::RoundCap); pen.setJoinStyle(Qt::MiterJoin); painter.setPen(pen);如需进一步了解Qt::PenStyle、Qt::PenCapStyle、Qt::PenJoinStyle的具体枚举值,也可以继续提问。