QPen类详细介绍

QPen 类详解及常用方法

QPen 是 PyQt5 中用于定义 ​线条绘制样式 的类,控制 QPainter 绘制图形时的线条颜色、宽度、线型、端点及连接样式。以下是详细说明及常用方法:

一、核心功能
  • 颜色:通过 QColor 或 Qt 预设颜色(如 Qt.red)设置。
  • 线宽:定义线条粗细(单位:像素)。
  • 线型:实线、虚线、点线等。
  • 端点样式:线段端点的形状(圆头、方头)。
  • 连接样式:线段拐角的连接方式(斜接、圆角、斜角)。
二、构造函数
构造函数说明示例
QPen()默认构造函数(黑色、1px 实线)pen = QPen()
QPen(QColor)指定颜色(默认线宽 1px,实线)pen = QPen(Qt.red)
QPen(Qt.GlobalColor, width=1, style=Qt.SolidLine)指定颜色、线宽、线型pen = QPen(Qt.blue, 2, Qt.DashLine)
QPen(QBrush, width, style, cap, join)使用画刷(支持渐变/纹理)pen = QBrush(Qt.green), 2, Qt.DotLine

三、常用方法
1. 颜色与线宽
方法说明示例
setColor(QColor)设置线条颜色pen.setColor(QColor(255, 0, 0))
color() -> QColor获取当前颜色color = pen.color()
setWidth(width: int)设置线宽(像素)pen.setWidth(3)
width() -> int获取当前线宽width = pen.width()
2. 线型控制
方法说明示例
setStyle(style: Qt.PenStyle)设置线型pen.setStyle(Qt.DashDotLine)
style() -> Qt.PenStyle获取当前线型style = pen.style()

线型枚举值(Qt.PenStyle)​

  • Qt.SolidLine:实线(默认)
  • Qt.DashLine:虚线
  • Qt.DotLine:点线
  • Qt.DashDotLine:点划线
  • Qt.DashDotDotLine:双点划线
  • Qt.NoPen:无线条
3. 端点与连接样式

| 方法 | 说明 | 示例 |
|------|------|
setCapStyle(style: Qt.PenCapStyle) | 设置端点样式 | pen.setCapStyle(Qt.RoundCap) |
capStyle() -> Qt.PenCapStyle | 获取端点样式 | cap = pen.capStyle() |
setJoinStyle(style: Qt.PenJoinStyle) | 设置连接样式 | pen.setJoinStyle(Qt.MiterJoin) |
joinStyle() -> Qt.PenJoinStyle | 获取连接样式 | join = pen.joinStyle() |

端点样式(Qt.PenCapStyle)​

  • Qt.FlatCap:方头(默认)
  • Qt.SquareCap:扩展方头(超出端点)
  • Qt.RoundCap:圆头

连接样式(Qt.PenJoinStyle)​

  • Qt.MiterJoin:斜接(默认)
    Qt.BevelJoin`:斜角
  • Qt.RoundJoin:圆角
4. 其他操作
方法说明示例
setBrush(QBrush)用画刷填充线条(支持渐变/纹理)pen.setBrush(QBrush(Qt.diagonalPattern))
isCosmetic() -> bool检查是否为“装饰性”线条(线宽不随缩放变化)pen.setCosmetic(True)

四、代码示例
1. 基础线条绘制

python

from PyQt5.QtGui import QPainter, QPen, QColor
from PyQt5.QtCore import Qt

class Canvas(QWidget):
    def paintEvent(self, event):
        painter = QPainter(self)
        
        # 红色虚线,线宽2px,圆头端点
        pen = QPen(Qt.red, 2, Qt.DashLine)
        pen.setCapStyle(Qt.RoundCap)
        painter.setPen(pen)
        painter.drawLine(50, 50, 200, 200)
2. 使用画刷填充线条

python

from PyQt5.Qt QLinearGradient

# 创建渐变画刷
gradient = QLinearGradient(0, 0, 100, 0)
gradient.setColorAt(0.0, Qt.red)
gradient.setColorAt(1.0, Qt.blue)
pen = QPen()
pen.setBrush(gradient)
pen.setWidth(5)
painter.setPen(pen)
painter.drawRect(10, 10, 100, 100)
3. 设置连接样式

python

pen = QPen(Qt.black, 4)
pen.setJoinStyle(Qt.RoundJoin)  # 圆角连接
painter.setPen(pen)
painter.drawPolygon([QPoint(10,10), QPoint(100,10), QPoint(50,100)])

python

from PyQt5.QtGui import QPainter, QPolygon
from PyQt5.QtCore import QPoint

# 定义多边形的顶点列表
points = [
    QPoint(50, 50),
    QPoint(150, 50),
    QPoint(200, 150),
    QPoint(100, 200),
    QPoint(50, 150)
]

# 将列表转换为 QPolygon
polygon = QPolygon(points)

# 绘制多边形
painter.drawPolygon(polygon)

 

五、注意事项
  1. 线宽与缩放
    默认线宽随 QPainter 的缩放比例变化。若需固定线宽,设置 pen.setCosmetic(True)
  2. 性能优化
    频繁修改画笔属性可能影响性能,建议复用实例。
  3. 平台差异
    某些线型(如虚线)在不同系统上的渲染效果可能不同。

通过灵活配置 QPen,可精确控制图形线条的视觉效果,满足从基础到高级的绘图需求!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值