Qt | 关于画笔的使用 QPen

1,019 阅读3分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

前言:

QPen是Qt中封装画笔功能的类,它定义了QPainter如何画线或者或者画轮廓线。QPen类一共有5个属性:线的样式、线的粗细、线的颜色、线的端点样式和线与线之间的连接方式。

画笔的属性:

1.线的样式:

线的样式通过Qt::PenStyle定义,Qt::PenStyle的枚举值为:

  • Qt::NoPen: 没有线;
  • Qt::SolidLien: 一条简单的实线(默认值);
  • Qt::DashLine: 由一些像素分隔的短线;
  • Qt::DotLine: 由一些像素分隔的点;
  • Qt::DashDotLine: 轮流交替的短线和点;
  • Qt::DashDotDotLine: 一个短线,两个点;
  • Qt::CustomDashLine: 自定义样式; 设置画笔样式的函数为:setStyle();

例:

QPen pen;
pen.setStyle(Qt::DashDitLine);

设置自定义的线条样式的函数:setDashOffset()setDashPattern();

例:

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

2.线的粗细:

线的粗细也可称为线的宽度。用于设置画笔宽度的函数为:setWidth(),参数的单位是像素,参数类型为整型。如果要获取画笔当前的宽度,可以调用width() 函数,返回值得单位也是像素,返回值的类型也是整型。

另外,Qt为了增加画笔宽度的精度,还提供了一对浮点数版本的函数:

  • void setWidthF(qreal width)
  • qreal widthF() const

3.线的颜色:

线的颜色可以用QColor类的对象来表示,用于设置画笔颜色的函数是setColor()。如果要获取画笔的颜色,可以调用color() 函数。

4.线的端点样式:

线的端点样式包括直角顶点、圆角顶点和平顶点。顶点样式对于宽度是0的QPen是无效的。线的端点样式对应的枚举值为:

  • Qt::FlatCap: 平顶点,不覆盖线条端点的正方形线条端点(默认值);
  • Qt::SquareCap: 直角顶点,覆盖端点并超出其一半宽度的正方形线端点;
  • Qt::RoundCap: 园顶点。

5.线与线之间的连接方式:

线与线之间的连接方式用于定义两条相交线的连接点是如何绘制的。线与线之间的连接样式同样对于宽度是0的QPen是无效的。线与线之间的连接样式有斜角连接、倒角连接、圆角连接三种,对应的枚举值为:

  • Qt::MiterJoin: 线的外缘延伸成一定角度,并填充此区域(默认值)(尖的);
  • Qt::BevelJoin: 两条线之间的三角形缺口被填满(平的);
  • Qt::RoundCap: 两条线之间被圆弧填充(圆弧);

构造一个画笔:

QPen提供了5种构造函数:

  1. QPen(); 不带参数,创建一个黑色的、SolidLine样式、宽度为1像素的画笔。
  2. QPen(Qt::PenStyle style); 用样式style创建一个黑色的、宽度为1像素的画笔。
  3. QPen(const QColor &color); 用颜色color创建一个SolidLine样式、宽度为1像素的画笔。
  4. QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin); 用指定的画刷、宽度、风格、端点样式和连接样式创建一个画笔。
  5. QPen(const QPen &pen); 用已有的画笔来创建另一个画笔。