Qt扫盲-QPen 理论使用总结

2023-10-22 14:37
文章标签 总结 使用 qt 理论 扫盲 qpen

本文主要是介绍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 penpen.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,即笔宽度的两倍(像素)。

这篇关于Qt扫盲-QPen 理论使用总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/262072

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方