Qt技巧笔记(九):QPen 画笔类简介及绘图实践指南

Qt技巧笔记(九):QPen 画笔类简介及绘图实践指南

`QPen` 是Qt绘图系统中用于定义线条(如轮廓线,边框线)样式(颜色、宽度、风格等)的类。其构造函数`QPen()`。 是Qt框架中用于定义如何绘制形状轮廓(线条)的一个非常重要的类。它控制`QPainter` 绘制线条、曲线和形状轮廓的外观,它包括线宽、颜色、样式、端点风格和连接风格等。

(一)基本属性简介

`QPen`主要用于设置以下属性:
主要属性属性功能
线条宽度(Color)线条的粗细(像素)
线条颜色(Width)支持 QColor、RGB 值或预定义颜色(如 Qt::red
线条样式(Style)如实线、虚线、点线等。
端点风格(Cap Style)线条端点的渲染方式(方形、圆形等)。
连接风格(Joint Style)多条线段连接处的渲染方式(斜接、圆角等)。
画刷 (Brush)实际上,填充线条的颜色是由 QBrush 决定的。如果你设置了一个渐变画刷给 QPen,可以绘制出渐变色的线条。

常用样式枚举值:

  1. 样条样式(Qt.PenStyle

    Qt.SolidLine实线
    Qt.DashLine虚线(由较短的线段组成)。
    Qt.DotLine点线(由点组成)。
    Qt.DashDotLine点划线(交替的线段和点)。
    Qt.DashDotDotLine双点划线。
    Qt.NoPen不绘制线条(通常用于不需要边框的情况)
  2. 端点样式 (Qt.PenCapStyle
    Qt.FlatCap线条末端是方形的,不覆盖端点坐标。
    Qt.SquareCap线条末端是方形的,但会覆盖端点坐标(比 FlatCap 稍微长一点)。
    Qt.RoundCap线条末端是圆形的。
  3. 连接样式(Qt.RoundJoinStyle)

    Qt.MiterJoin尖角连接。
    Qt.BevelJoin平角连接(切角)。
    Qt.RoundJoin圆角连接。

设置样条样式:

/* by 01022.hk - online tools website : 01022.hk/zh/generatebscwallets.html */
setStyle(Qt::PenStyle style);

设置样条宽度

/* by 01022.hk - online tools website : 01022.hk/zh/generatebscwallets.html */
setWidth(int width);      // 整数宽度(默认)
setWidthF(qreal width);   // 浮点宽度(高精度)

设置颜色

setColor(const QColor &color);

设置端点风格

setCapStyle(Qt::PenCapStyle cap);

设置连接风格

setCapStyle(Qt::PenCapStyle cap);

始终在创建 QPen 对象后,显式地设置您需要的颜色和宽度。

QPen();  // 默认构造函数(黑色 1px 实线)
QPen(const QColor &color);  // 指定颜色
QPen(const QBrush &brush, qreal width);  // 指定画刷和宽度
QPen(const QBrush &brush, qreal width, Qt::PenStyle style);  // 完整参数

(二)示例用法

2.1基本用法

QPainter painter(this);
QPen pen(Qt::blue, 2, Qt::DashLine, Qt::RoundCap, Qt::RoundJoin);
painter.setPen(pen);
painter.drawLine(10, 10, 100, 100);

2.2动态修改属性

QPen pen;
pen.setColor(Qt::red);
pen.setWidth(3);
pen.setStyle(Qt::DotLine);
painter.setPen(pen);
painter.drawRect(50, 50, 100, 100);

2.3 自定义虚线

QPen pen(Qt::black, 2);
QVector<qreal> pattern;
pattern << 1 << 3 << 5 << 3;  // 自定义虚线模式
pen.setDashPattern(pattern);
painter.setPen(pen);
painter.drawEllipse(100, 100, 50, 50);

2.4 结合QBrush使用

QPen pen(QBrush(Qt::green, Qt::DiagCrossPattern), 3);
painter.setPen(pen);
painter.drawLine(20, 20, 200, 20);

2.5 与QPainter配合使用

QPen 需通过 QPainter::setPen() 应用到绘制操作中:

void MyWidget::paintEvent(QPaintEvent *event) {
    QPainter painter(this);
    
    // 设置画笔
    QPen pen(Qt::blue, 2, Qt::SolidLine);
    painter.setPen(pen);
    
    // 绘制线条和形状
    painter.drawLine(10, 10, 100, 100);
    painter.drawRect(50, 50, 100, 100);
    
    // 更换画笔
    pen.setColor(Qt::red);
    pen.setStyle(Qt::DashLine);
    painter.setPen(pen);
    painter.drawEllipse(100, 100, 50, 50);
}

常见应用场景
  1. 绘图工具:实现不同粗细、颜色的画笔。
  2. 数据可视化:绘制折线图、柱状图的边框。
  3. 界面设计:自定义控件的边框、指示器。
  4. CAD/图形软件:精确控制线条渲染。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值