QPen用于绘图时对线条进行设置,主要包括线宽、颜色、线型等,下面是QPen类的主要接口函数。通常一个设置函数都有一个对应的读取函数,例如setColor()用于设置画笔颜色,对应的读取画笔颜色的函数为color(),这里仅列出设置函数(省略了函数参数中的const关键字)。
- void setColor(QColor &color):设置画笔颜色,即线条颜色
- void setWidth(int width):设置线条宽度
- void setStyle(Qt::PenStyle style):设置线条样式,参数为QPenStyle枚举类型
- void setCapStyle(Qt::PenCapStyle style):设置线条端点样式,参数为QPenCapStyle枚举类型
- void setJoinStyle (Qt::PenJoinStyle style): 设置连接样式,参数为QPenJoinStyle枚举类型
创建QPen的代码如下:
QPainter painter(this);
QPen pen(Qt::green, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin);
painter.setPen(pen);
上述代码等同于
QPainter painter(this);
QPen pen;
pen.setStyle(Qt::DashDotLine);
pen.setWidth(3);
pen.setBrush(Qt::green);
pen.setCapStyle(Qt::RoundCap);
pen.setJoinStyle(Qt::RoundJoin);
painter.setPen(pen);
线条颜色和宽度的设置无需多说,QPen影响线条特性的另外3个主要属性是线条样式(style)、 端点样式(capStyle)和连接样式(joinStyle)。
线条样式
setStyle(Qt::PenStyle style)函数用于设置线条样式,参数是一个枚举类型Qt::PenStyle的常量, 几种典型的线条样式的绘图效果如下图所示。QtPenStyle类型还有一个常量Qt::NoPen表示不绘制线条。
- Qt::NoPen:没有线条
- Qt::SolidLine:一条普通的线
- Qt::DashLine:由几个像素分隔的划线
- Qt::DotLine:由几个像素分隔的点线
- Qt::DashDotLine:交替的点划线
- Qt::DashDotDotLine:一段划,两个点,一段划,两个点。
除了几种基本的线条样式外,用户还可以自定义线条样式(Qt::CustomDashLine),自定义线条样式时需要用到setDashOffset()和setDashPattem()函数。上图中自定义线条的代码为,
QPen pen;
QVector<qreal> dashes;
qreal space = 4;
dashes << 1 << space << 3 << space << 9 << space
<< 27 << space << 9 << space;
pen.setDashPattern(dashes);
线条端点样式
setCapStyle(Qt::PenCapStyle style)函数用于设置线条端点样式,参数是一个枚举类型 QPenCapStyle的常量,该枚举类型的3种取值及其绘图效果如下图所示。
- Qt::FlatCap:不覆盖线终点的方形线端
- Qt::SquareCap:覆盖端点并超出终点线宽一半的方形线端
- Qt::RoundCap:圆形末端
线条连接样式
setJoinStyle(Qt::PenJoinStyle style)函数用于设置线条连接样式,参数是一个枚举类型 Qt::PenJoinStyle的常量,该枚举类型的取值及其绘图效果如下图所示。
- Qt::MiterJoin:线的外边缘延伸以成一定角度相交,并填充此区域
- Qt::BevelJoin:填充两条线之间的三角形凹口
- Qt::RoundJoin:填充两条线之间的圆弧
默认样式是Qt::BevelJoin。应用Qt::MiterJoin 样式时,可以使用setMiterLimit()函数指定斜接连接可以从连接点延伸多远。miterLimit()必须以笔宽为单位指定。默认miter limit为2,即为笔宽度的两倍。