QT的QPen详细介绍

本文围绕Qt中的QPen类展开,介绍其用于定义绘图系统中线条外观属性。详细讲解了QPen的主要属性,如颜色、宽度、样式等,还对QPen类的成员函数和非成员函数进行了分析,包括构造函数、析构函数、获取和设置属性的函数等,以及序列化相关函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此篇文章来源于自己在学习QT过程中遇到Qpen时总结的知识点,覆盖每个成员函数的相关代码讲解,本人水平有限,如果有其他问题,大家在评论区交流即可,共同学习,一起进步。

一、QPen简介

Qt中的QPen类是一个核心图形模块中的重要类,用于定义Qt绘图系统中线条的外观属性。QPen类的对象代表了一支虚拟的“画笔”,你可以通过设置它的各种属性来控制使用QPainter在QPaintDevice上绘制直线、曲线或形状轮廓时线条的表现。

QPen的主要属性包括:

  1. 颜色 (color() 或 set_color()):

    • 可以设置为任意的QColor对象,用来指定线条的颜色。例如,可以通过预定义的颜色常量如Qt::black设置为黑色,也可以使用RGB、ARGB值自定义颜色。
  2. 宽度 (width() 或 setWidth()widthF() 或 setWidthF()):

    • 设置线条的粗细,可以是整数值或浮点数,单位通常与设备相关的像素或逻辑单位。
  3. 样式 (style() 或 setStyle()):

    • 定义线条的基本形状,比如连续线(SolidLine)、虚线(DashLine)、点线(DotLine)、中心线(DashDotLine)等等。
  4. 笔刷 (brush() 或 setBrush()):

    • 使用QBrush对象来填充线条,允许线条具有复杂的填充样式,例如渐变色或图案填充。
  5. 线帽样式 (capStyle() 或 setCapStyle()):

    • 控制线段末端的形状,可选样式包括平头(SquareCap)、圆头(RoundCap)和默认(FlatCap)。
  6. 连接样式 (joinStyle() 或 setJoinStyle()):

    • 决定两线段相交或转折处的连接方式,如斜接(BevelJoin)、圆角(RoundJoin)和平接(MiterJoin)。

二、成员函数

1、QPen::QPen(QPen &&pen)

        这个构造函数的作用是执行资源的移动操作,而不是复制操作。当一个新的QPen对象通过右值引用(rvalue reference)来初始化时,它会接管原有QPen对象的所有权和状态,而原QPen对象通常会被置为空状态或者不可用状态,避免了昂贵的深拷贝。

具体到QPen类,这意味着新创建的QPen对象将直接获取原始QPen对象所包含的颜色、宽度、样式等所有属性,并且不会额外分配新的内存资源。这样的设计有助于提高性能,尤其是在处理大型数据结构或者频繁创建销毁临时对象的情况下。

示例代码:

QPen originalPen(Qt::blue, 2, Qt::SolidLine);
// 创建一个新的QPen对象,通过移动构造函数从originalPen那里接管状态
QPen movedPen(std::move(originalPen));
// 这时,movedPen拥有了originalPen的所有属性,而originalPen可能处于未定义状态或空状态

在上述代码片段中,std::move是一个强制转换操作,用于表明我们打算放弃对原始QPen对象的所有权,将其资源转移给新创建的QPen对象。

2、QPen::QPen(const QPen &pen)

QPen::QPen(const QPen &pen) 是C++中QPen类的一个复制构造函数。这个函数用于创建一个新的QPen对象,该对象是已存在QPen对象的一个副本,即新对象的属性完全复制自传入的参数pen

在Qt的绘图系统中,当你需要创建一个与现有QPen相同属性的新画笔时,就会用到这个复制构造函数。例如,你可能需要在一个地方保存原始画笔的状态,然后基于此创建并修改一个新的画笔。

示例代码:

QPen originalPen(Qt::blue, 2, Qt::SolidLine);
// 创建一个新的QPen对象,其属性与originalPen完全一致
QPen copiedPen(originalPen);
// 此时,copiedPen和originalPen都有相同的颜色(蓝色)、宽度(2像素)和样式(实线)

在这个过程中,复制构造函数将会对原始QPen对象的颜色、宽度、样式以及其他所有相关属性进行深度复制,确保新创建的QPen对象与原始对象有独立但相同的属性设置。

3、QPen::QPen(const QBrush &brushqreal widthQt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin)

此函数是Qt框架中的QPen类的一个构造函数,它用于初始化一个新的QPen对象,该对象定义了绘制图形轮廓的属性。

  • const QBrush &brush: 指定画笔的颜色或图案,可以是一个纯色或渐变色等复杂填充方式的QBrush对象。

  • qreal width: 设置画笔的宽度,单位通常为逻辑像素。

  • Qt::PenStyle style: 定义画笔的线条样式,可选值包括但不限于:

    • Qt::SolidLine(实线)
    • Qt::DashLine(虚线)
    • Qt::DotLine(点线)
    • 等其他多种风格
  • Qt::PenCapStyle cap: 指定线条端点的形状,如:

    • Qt::SquareCap(方形)
    • Qt::RoundCap(圆形)
    • Qt::FlatCap(平头)
  • Qt::PenJoinStyle join: 定义两条线段交汇处的连接方式,例如:

    • Qt::BevelJoin(斜角连接)
    • Qt::RoundJoin(圆角连接)
    • Qt::MiterJoin(尖角连接)

通过这个构造函数,您可以一次性创建一个具有指定颜色、宽度、线条样式、线帽样式以及线连接样式的QPen对象,并将其应用于 QPainter 对象来进行2D绘图操作。如果不指定某些参数,则会使用默认值,如上述构造函数声明所示。

4、QPen::QPen(const QColor &color)

QPen::QPen(const QColor &color) 是Qt框架中QPen类的一个构造函数,它的目的是创建一个基于给定颜色的新QPen对象。这个构造函数简化了创建只设置颜色属性的画笔的过程,而其它属性如宽度、线条样式、线帽样式和线连接样式则采用QPen类的默认值。

  • const QColor &color: 这个参数是用来指定画笔颜色的,QColor是Qt中的颜色类,它可以表示各种RGB、RGBA或其他颜色空间中的颜色。

通过此构造函数创建的QPen将会具有用户指定的颜色,并且默认宽度为1,线条样式为实线(Qt::SolidLine),线帽样式为方形(Qt::SquareCap),线连接样式为斜角连接(Qt::BevelJoin)。这样的QPen对象常被用于在QPainter上下文中绘制具有单一颜色边界的图形元素。

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QColor>

class DrawingWidget : public QWidget {
public:
    DrawingWidget(QWidget *parent = nullptr) : QWidget(parent) {}

protected:
    void paintEvent(QPaintEvent *) override {
        QPainter painter(this);

        // 创建一个红色的QPen
        QPen redPen(QColor("red"));
        
        // 设置当前画笔为红色画笔
        painter.setPen(redPen);

        // 使用红色画笔绘制一个矩形
        painter.drawRect(50, 50, 200, 100);
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    
    DrawingWidget widget;
    widget.show();

    return app.exec();
}

在这个例子中,我们首先定义了一个继承自QWidget的DrawingWidget类,在其paintEvent方法中,我们创建了一个带有红色颜色的QPen对象,然后将其设置为当前QPainter的画笔。接着,我们使用这个设置了红色画笔的QPainter来绘制一个矩形,这样矩形的边框就会显示为红色。

5、QPen::QPen(Qt::PenStyle style)

QPen::QPen(Qt::PenStyle style) 是Qt库中QPen类的一个构造函数,它接收一个Qt::PenStyle类型的参数,用于创建一个仅定义了线条样式的新QPen对象。Qt::PenStyle枚举类型包含了多种线条样式,例如实线(SolidLine)、虚线(DashLine)、点线(DotLine)等。

这个构造函数创建的QPen对象的其它属性,如颜色、宽度、线帽样式和线连接样式,都将采用默认值。例如,默认颜色是黑色,宽度默认为1,线帽和线连接样式也有各自的默认值。

以下是一个简单的示例:

QPen dashedPen(Qt::DashLine);

上面的代码将创建一个样式为虚线的QPen对象,其颜色和宽度均为默认值。这个QPen对象可以用于QPainter进行绘图操作,使绘制出的线条呈现虚线效果。

6、QPen::~QPen()

QPen::~QPen() 是Qt库中QPen类的析构函数。在C++中,析构函数是一个特殊的方法,当一个对象生命周期结束时(比如对象的作用域结束或者显式调用delete销毁对象时)自动调用,用于释放该对象所占用的资源。

对于QPen类来说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值