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

「QT」几何数据类 之 QPolygonF 浮点型多边形类

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「QT」QT5程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明
「Py」Python程序设计「Math」探秘数学世界

目录

    • Qt 5.15 中的 QPolygonF 类详解
      • 一、引言
      • 二、使用范围
      • 三、类的头文件
      • 四、类的继承
      • 五、类的构造介绍
      • 六、共有函数介绍
      • 七、Static 函数介绍
      • 八、运算符重载
      • 九、详细代码举例

Qt 5.15 中的 QPolygonF 类详解

一、引言

QPolygonF 是 Qt 5.15 图形框架中的一个核心类,专门用于表示和操作由浮点数定义的二维多边形。与 QPolygon 不同,QPolygonF 使用 QPointF(包含浮点型 x 和 y 坐标)作为其顶点类型,这使得 QPolygonF 能够更精确地表示和处理多边形,尤其是在进行缩放、旋转等变换操作时。QPolygonF 类提供了丰富的接口,使得开发者能够轻松创建、修改和绘制多边形。
官方文档:https://doc.qt.io/qt-5/qpolygonf.html

二、使用范围

QPolygonF 类广泛应用于需要高精度图形处理的场合,如绘制复杂形状、实现图形变换、进行碰撞检测等。在 Qt 的图形视图中,QPolygonF 可以与 QPainter、QTransform 等类配合使用,实现高质量的图形渲染和交互效果。

三、类的头文件

QPolygonF 类的定义位于 <QtGui/QPolygonF> 头文件中。在使用 QPolygonF 类之前,需要在源文件中包含这个头文件:

#include <QtGui/QPolygonF>

四、类的继承

QPolygonF 类继承自 QVector,这意味着它继承了 QVector 的所有功能,包括动态数组管理、迭代器访问等。此外,QPolygonF 还扩展了针对多边形特有的操作和方法。

五、类的构造介绍

QPolygonF 类提供了多种构造函数,以满足不同的使用需求:

  1. QPolygonF()
    创建一个空的多边形。

  2. QPolygonF(const QPolygonF &other)
    复制一个已有的多边形。

  3. QPolygonF(const QVector &points)
    根据给定的 QPointF 点集创建一个多边形。

  4. QPolygonF(int size)
    创建一个具有指定大小(顶点数)的多边形,但顶点坐标未初始化。

  5. QPolygonF(const QRectF &rect, bool closed = true)
    根据给定的 QRectF 矩形创建一个多边形。如果 closedtrue,则多边形是闭合的。

  6. *QPolygonF(const QPointF points, int size)
    根据给定的 QPointF 数组和大小创建一个多边形。

六、共有函数介绍

QPolygonF 类提供了丰富的共有函数,用于操作多边形的顶点和属性:

  1. int size() const
    返回多边形中顶点的数量。

  2. QPointF at(int index) const
    返回指定索引处的顶点。

  3. void setPoint(int index, const QPointF &point)
    设置指定索引处的顶点。

  4. void replace(int index, const QPointF &value)
    替换指定索引处的顶点。

  5. void append(const QPointF &point)
    在多边形末尾添加一个新的顶点。

  6. void prepend(const QPointF &point)
    在多边形开头添加一个新的顶点。

  7. void remove(int index)
    移除指定索引处的顶点。

  8. void clear()
    移除所有顶点,使多边形变为空。

  9. QRectF boundingRect() const
    返回包含多边形的最小矩形。

  10. bool isEmpty() const
    判断多边形是否为空(没有顶点)。

  11. bool isClosed() const
    判断多边形是否闭合。

  12. QPolygonF translated(const QPointF &offset) const
    返回平移后的多边形。

  13. QPolygonF united(const QPolygonF &r) const
    返回与给定多边形的并集。

  14. QPolygonF intersected(const QPolygonF &r) const
    返回与给定多边形的交集。

  15. QPolygonF subtracted(const QPolygonF &r) const
    返回减去给定多边形后的结果。

七、Static 函数介绍

QPolygonF 类本身并没有提供 static 成员函数,但它继承自 QVector,因此可以使用 QVector 提供的所有 static 方法和属性。不过,对于多边形操作而言,QPolygonF 的实例方法已经足够强大,通常不需要使用 static 方法。

八、运算符重载

QPolygonF 类继承自 QVector,因此支持 QVector 提供的所有运算符重载。这些运算符重载使得 QPolygonF 对象可以像普通数组一样进行索引、迭代和比较操作。例如,可以使用 operator[] 来访问或修改多边形的顶点,使用 ==!= 来比较两个多边形是否相等。
何曾参静谧的博客

九、详细代码举例

以下是一个使用 QPolygonF 类的详细代码示例,演示了如何创建一个多边形并在窗口上绘制它:

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPolygonF>

class MyWidget : public QWidget {
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
        // 创建一个多边形
        polygon << QPointF(50, 50) << QPointF(150, 50) << QPointF(100, 150) << QPointF(50, 150);
    }

protected:
    void paintEvent(QPaintEvent *event) override {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing); // 启用抗锯齿
        painter.setBrush(QBrush(Qt::red, Qt::SolidPattern)); // 设置红色填充
        painter.drawPolygon(polygon); // 绘制多边形
        QWidget::paintEvent(event);
    }

private:
    QPolygonF polygon; // 声明一个 QPolygonF 对象
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    MyWidget w;
    w.resize(200, 200); // 设置窗口大小
    w.show();
    return app.exec();
}

在这个示例中,我们创建了一个名为 MyWidget 的自定义窗口类,并在其构造函数中创建了一个 QPolygonF 对象,并设置了其顶点。然后,我们重写了 paintEvent 方法,使用 QPainter 对象在窗口上绘制了多边形。注意,我们还启用了抗锯齿(QPainter::Antialiasing),以使绘制的多边形边缘更加平滑。
何曾参静谧的博客


在这里插入图片描述


http://www.kler.cn/a/388404.html

相关文章:

  • 3D绘制动态爱心Matlab
  • mac终端使用pytest执行iOS UI自动化测试方法
  • ❤React-React 组件通讯
  • 九州未来再度入选2024边缘计算TOP100
  • Prometheus面试内容整理-Prometheus 的架构和工作原理
  • Wireshark
  • 第十六章 TCP 客户端 服务器通信
  • 关于若依500验证码问题的求助
  • WPS Office手机去广高级版
  • PostgreSQL pg-xact(clog)目录文件缺失处理
  • MyBatis5-缓存
  • SpringBoot中使用Thymeleaf模板引擎
  • C# 选择导入文件的路径、导出文件的路径
  • [vulnhub] DarkHole: 1
  • Elasticsearch 实战应用:高效搜索与数据分析
  • 「OC」SDWebimage的学习
  • 万字长文解读深度学习——循环神经网络RNN、LSTM、GRU、Bi-RNN
  • 多线程的创建方式以及及Thread类详解
  • 小菜家教平台(五):基于SpringBoot+Vue打造一站式学习管理系统
  • axios 访问data类型和.net core 后端对应接收
  • Ubuntu和Debian系列的Release默认shell解释器变更
  • 虚拟现实技术在旅游行业的应用
  • 42.第二阶段x86游戏实战2-lua寻找状态指针
  • C++设计模式结构型模式———责任链模式
  • mapreduce综合应用案例 — 气象数据清洗
  • StarTowerChain 与 DePIN:共筑区块链新蓝图