当前位置: 首页 > news >正文

Qt扫盲-QPen 理论使用总结

QPen 理论使用总结

  • 一、概述
  • 二、Pen Style 画笔风格
  • 三、Cap Style 帽风格
  • 四、Join Style 连接处样式

一、概述

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);

它等价于

  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,方帽样式(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);

请注意,破折号图案是以笔的宽度为单位指定的,例如,宽度为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,即笔宽度的两倍(像素)。

相关文章:

  • 钢铁异常分类 few-shot 问题 小陈读paper 钢铁2
  • 【Linux】文件权限、目录权限、掩码、粘滞位以及相关指令
  • nvm 安装 node 安装不上 npm
  • Go 语言的垃圾回收机制:自动化内存管理
  • 微信小程序自定义方法submitPwd(e){}传入的e有什么作用
  • 国密https访问
  • 冯诺依曼体结构 - 为什么要有操作系统
  • SystemVerilog学习(4)——自定义结构
  • LLM 系列 | 21 : Code Llama实战(上篇) : 模型简介与评测
  • 寻找Windows API 原始字节(x64dbg)
  • JavaPTA练习题 7-3 身体质量指数(BMI)测算
  • 微信小程序一键获取位置
  • 解决windows10、windows11故障:Microsoft-Windows-Kernel-Processor-Power 事件ID:37
  • Could not find artifact com.sleepycat;je:jar:7.3.7 in aliyunmaven
  • 智能水印相机微信小程序源码
  • 深度学习中常用的激活函数有sigmoid、tanh、ReLU、LeakyReLU、PReLU、GELU等。
  • 08-React扩展
  • c/c++的include机制简述
  • STM32不使用 cubeMX实现外部中断
  • 全网最丑焊锡教程(仅排针焊接心得)
  • 4月制造业PMI为49%,比上月下降1.5个百分点
  • 三位成功女性,如何应对失败
  • 现场|西岸美术馆与蓬皮杜启动新五年合作,新展今开幕
  • 人社部:对个人加大就业补贴支持,对企业加大扩岗支持
  • 一张老照片里蕴含的上海文脉
  • 新干式二尖瓣瓣膜国内上市,专家:重视瓣膜病全生命周期管理