写点什么

Qt | 关于画笔的使用 QPen

作者:YOLO.
  • 2022 年 9 月 07 日
    河北
  • 本文字数:1189 字

    阅读完需:约 4 分钟

Qt | 关于画笔的使用 QPen

前言:

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); 用已有的画笔来创建另一个画笔。

发布于: 刚刚阅读数: 3
用户头像

YOLO.

关注

还未添加个人签名 2022.05.06 加入

还未添加个人简介

评论

发布
暂无评论
Qt | 关于画笔的使用 QPen_qt_YOLO._InfoQ写作社区