• Qt扫盲-QPen 理论使用总结


    一、概述

    QPen 是Qt绘图控件里面的一个重要的组件,和QColor 一样也是类似的一个属性类。这个类就是描述一个画笔具有的属性。

    一个画笔 Pen 有style(), width(), brush(), capStyle()和 joinStyle()。
    笔的 style() [样式] 定义了线条的类型。brush() [笔刷] 用于填充 Pen 生成的笔画。使用QBrush类来指定填充样式。capStyle() [笔帽样式] 决定了可以使用QPainter绘制的线尾帽,而 joinStyle() [连接样式] 描述了如何绘制两条线之间的连接。笔的宽度可以以整数 ( width())和浮点(widthF())精度指定。线宽为0表示化妆笔。这意味着笔的宽度总是画一个像素宽,独立于 QPainter 的变换设置

    我们可以使用相应的 setStyle(), setWidth(), setBrush(), setCapStyle() 和 setJoinStyle() 函数可以很容易地修改各种设置(注意,当改变笔的属性时,painter的笔必须重置)。

    例如:

      QPainter painter(this);
      QPen pen(Qt::green, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin);
      painter.setPen(pen);
    
    • 1
    • 2
    • 3

    它等价于

      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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    默认笔是一个纯黑色的笔刷,宽度为1,方帽样式(Qt::SquareCap)和斜角连接样式(Qt::BevelJoin)。

    此外,QPen还提供了color()和setColor()方便函数,分别用于提取和设置Pen 笔刷的颜色。笔也可以进行 比较 和 写入 stream。

    二、Pen Style 画笔风格

    Qt提供了几个由Qt::PenStyle枚举表示的内置样式:

    Qt::SolidLineQt::SolidLineQt::DotLine
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    Qt: DashDotLineQt: DashDotDotLineQt: CustomDashLine
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    只需使用setStyle()函数将Pen 样式转换为内置样式中的任何一种,除了Qt::CustomDashLine样式,我们将很快回到它。将样式设置为Qt::NoPen告诉painter不绘制线条或轮廓。Pen 的默认样式是Qt::SolidLine。

    自Qt 4.1以来,也可以使用 setDashPattern() 函数指定自定义破折号模式,该函数隐式地将笔的样式转换为Qt::CustomDashLine。模式参数QVector必须指定为偶数个qreal条目,其中条目1,3,5…是破折号和2,4,6…是空格。例如,上面显示的自定义模式是使用以下代码创建的:

      QPen pen;
      QVector<qreal> dashes;
      qreal space = 4;
    
      dashes << 1 << space << 3 << space << 9 << space
                 << 27 << space << 9 << space;
    
      pen.setDashPattern(dashes);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    请注意,破折号图案是以笔的宽度为单位指定的,例如,宽度为10的长度为5的破折号长为50像素。

    可以使用 dashPattern() 函数检索当前设置的破折号模式。使用isSolid()函数来确定Pen 是否有固体填充。

    三、Cap Style 帽风格

    帽样式定义了如何使用QPainter绘制线条的端点。帽形样式仅适用于宽行,即宽度大于等于1的行。Qt::PenCapStyle enum提供了以下样式:

    Qt::SquareCapQt::FlatCapQt::RoundCap
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    SquareCap样式是一个正方形的线端点,它覆盖了端点并以线宽的一半扩展到它之外。FlatCap样式是一个不覆盖行尾的方形行尾。而Qt::RoundCap样式是一个覆盖结束点的圆线结束。

    默认为Qt::SquareCap。

    当笔宽为0或1时是否绘制终点取决于 Cap Style 样式。使用 Qt::SquareCap 或 Qt::RoundCap它 们被绘制,使用Qt::FlatCap它们不被绘制。

    四、Join Style 连接处样式

    连接样式定义了如何使用QPainter绘制两条连接线之间的连接。join样式只适用于宽线,即宽度大于等于1的线。

    PenJoinStyle枚举提供了以下样式:

    Qt: BevelJoinQt: MiterJoinQt: RoundJoin
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    BevelJoin样式填充两条线之间的三角形缺口。MiterJoin样式扩展线条以一定角度相交。而Qt::RoundJoin样式填充两条线之间的圆弧。

    默认为Qt::BevelJoin。

    当应用Qt::MiterJoin样式时,可以使用setMiterLimit()函数来指定斜接连接可以从连接点扩展多远。miterLimit()用于减少线连接之间的伪影,其中线接近平行。

    miterLimit()必须以笔的宽度为单位指定,例如,宽度为10的miterLimit为50像素长。默认的斜接限制是2,即笔宽度的两倍(像素)。

  • 相关阅读:
    JAVA常用工具类
    被“智能”蒙蔽双眼的智能制造
    Granular Ball Computing (GBC)
    【redis-03】redis注解的使用解析
    股价暴跌了74.5%后,乐信第三季度财报可能会低于市场预期
    基于目录的ant任务
    HDFS文件读取流程
    1049 Counting Ones 甲级 xp_xht123
    Fedora 35 部署DNS主从和分离解析 —— 筑梦之路
    机器人制作开源方案 | 桌面级全向底盘--本体说明+驱动控制
  • 原文地址:https://blog.csdn.net/qq_43680827/article/details/133971820