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

news2024/11/14 16:37:30

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「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.coloradmin.cn/o/2237951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

架构篇(04理解架构的演进)

目录 学习前言 一、架构演进 1. 初始阶段的网站架构 2. 应用服务和数据服务分离 3. 使用缓存改善网站性能 4. 使用应用服务器集群改善网站的并发处理能力 5. 数据库读写分离 6. 使用反向代理和CDN加上网站相应 7. 使用分布式文件系统和分布式数据库系统 8. 使用NoSQL和…

OpenCV基础05_GUI和PyMsql

目录 一、PySimpleGUI 1、布局和窗口 2、文本框组件 3、视频处理 4、图片处理 二、pymsql 1、数据库操作 2、数据采集 3、人脸识别 一、PySimpleGUI PySimpleGUI 是一个用于简化 GUI 编程的 Python 包&#xff0c;它封装了多种底层 GUI 框架&#xff08;如 tkinter、…

ModuleNotFoundError: No module named ‘_ssl‘ centos7中的Python报错

报错 ModuleNotFoundError: No module named ‘_ssl’ 解决步骤&#xff1a; 1.下载openssl wget https://www.openssl.org/source/openssl-3.0.7.tar.gz tar -zxvf openssl-3.0.7.tar.gz cd openssl-3.0.72.编译安装 ./config --prefix/usr/local/openssl make make install3…

外呼系统只需这 3 种功能,电销效率快速提升

在当今竞争激烈的商业环境中&#xff0c;电销团队面临着诸多挑战。如何提高电销效率&#xff0c;成为了企业关注的焦点。今天&#xff0c;小编就给大家介绍&#xff0c;沃创云三种外呼系统功能&#xff0c;让你的电销效率快速提升。 一、智能拨号功能 传统的电销方式中&#x…

18. Mouse 鼠标、KeyBoard 键盘和 Action 消息事件处理

在本节的例子中&#xff0c;会自定义很多UI控件实现不同的事件响应&#xff0c;如下图所示&#xff1a; IOKit 事件框架 事件流程 OS X的事件依赖 IOKit 框架&#xff0c;事件发生后首先会传递到IOKit框架中处理&#xff0c;然后通知Window Server服务层处理&#xff0c;由…

C# 实现对指定句柄的窗口进行键盘输入的实现

在C#中实现对指定句柄的窗口进行键盘操作&#xff0c;可以通过多种方式来实现。以下是一篇详细的指南&#xff0c;介绍如何在C#中实现这一功能。 1. 使用Windows API函数 在C#中&#xff0c;我们可以通过P/Invoke调用Windows API来实现对指定窗口的键盘操作。以下是一些关键的…

Spring Plugin与策略模式:打造动态可扩展的应用

目录 一、策略模式 二、Spring Plugin 2.1 Spring Plugin 实现策略模式开发 2.2 策略模式优缺点 三、Spring Plugin 原理 一、策略模式 策略模式是一种设计模式&#xff0c;它允许程序在运行中动态的选择不同的行为方式进行动态执行。策略模式的核心思想是将行为封装在一个个…

Word大珩助手:超大数字怎么读?35位数字?69位数字?

俄罗斯日前对谷歌开出了20000000000000000000000000000000000&#xff08;35位数字&#xff09;美元的罚款 这一数字远超全球GDP总和&#xff0c;消息一出很快就登上热搜。 面对这样一个庞大的数字&#xff0c;人们不禁好奇&#xff0c;这样的数字该如何读出来&#xff1f; …

asp.net文件防盗链

URLRewriter实现 可以参考下面的文章 代码 .net framework 新建asp.net framework的web项目&#xff0c;新建AntiTheftChainHandler using System.Web;namespace AntiTheftChainStu01.Handler {public class AntiTheftChainHandler : IHttpHandler{public bool IsReusable…

【含开题报告+文档+PPT+源码】基于SSM的蛋糕店销售管理系统的设计与实现

开题报告 在现代社会&#xff0c;蛋糕作为一种受欢迎的甜点&#xff0c;广泛应用于各种庆祝活动和节日。传统的蛋糕预订方式往往需要用户亲自到店面进行预订&#xff0c;预订流程繁琐&#xff0c;时间和地点限制也给用户带来了不便。随着智能手机和移动互联网的普及&#xff0…

政治经济学笔记

【拯救者】政治经济学速成&#xff08;基础习题&#xff09; 研究生产关系必须联系生产力和上层建筑 1.生产力与生产关系 生产力代表生产的物质内容&#xff0c;生产关系是生产的社会形式。生产力决定生产关系&#xff0c;生产关系对生产力具有 反作用 *其中的”反作用”指的是…

005.精读《B-Tree vs LSM-Tree》

文章目录 1. 引言&#xff1a;2. 精读2.1 性能指标2.2 B-tree2.3 LSM-tree2.4 性能对比 3. 写在最后 1. 引言&#xff1a; 在本期的技术深度解析中&#xff0c;我们将聚焦于数据领域的两个重要成员——B-Tree和LSM-Tree。这两种数据结构在数据管理系统中最为普遍且广泛采用的数…

关于 el-table 的合计行问题

目录 一.自定义合计行 二.合计行不展示&#xff0c;只有缩放/变大窗口或者F12弹出后台时才展示 三.合计行出现了表格滚动条下方 四.合计行整体样式的修改 五.合计行单元格样式修改 1.css 2.jsx方式 六.合计行单元格合并 一.自定义合计行 通过 show-summary 属性开启合计…

C++ | Leetcode C++题解之第554题砖墙

题目&#xff1a; 题解&#xff1a; class Solution { public:int leastBricks(vector<vector<int>>& wall) {unordered_map<int, int> cnt;for (auto& widths : wall) {int n widths.size();int sum 0;for (int i 0; i < n - 1; i) {sum wi…

如何使用 C# 编写一个修改文件时间属性的小工具?

下面是简鹿办公一个用 C# 编写的简单工具&#xff0c;它可以批量修改文件的创建时间、最后访问时间和最后修改时间。我们将使用 .NET Framework 或 .NET Core 来实现这个功能。 完整示例代码 1. 创建一个新的 C# 控制台应用程序 您可以使用 Visual Studio 或 .NET CLI 创建一个…

使用FTP与多个合作伙伴传文件,如何处理运维管理和数据安全问题

许多行业的企业使用FTP与外部客户、供应商等合作伙伴进行文件交换&#xff0c;如大型保险公司、研究所、IC设计企业、汽车制造厂商等。基于FTP可以满足企业与外部合作伙伴文件收发的基础需求&#xff0c;但在IT运维管理、数据安全保障及业务便利性上仍存在不同程度的缺陷和不足…

Simulink中Matlab function使用全局变量

目录 一. 引言二. 普通Matlab function使用全局变量三. Simulink中的Matlab function使用全局变量四. 如何利用Matlab function的全局变量施加随机噪声 一. 引言 最近发现了之前仿真中的一个问题&#xff0c;记录一下备忘。 Matlab function中有时候需要用到全局变量&#xf…

Jmeter的安装,设置中文,解决乱码问题

1.Jmeter安装 1-Jmeter如何下载 1---我这里提供一个下载快的方式 https://www.123684.com/s/lWZKVv-4jiav?提取码:4x4y 2---Jmeter官网下载地址 Apache JMeter - Download Apache JMeter 2-配置java环境 1---下载javaJDK 官方下载地址 https://www.oracle.com/java/techno…

深 度 学 习

神经网络基础 一、逻辑回归( Logic Regression ) 1 问题的模型 模型&#xff1a; 其中xx为输入量&#xff0c;y^​预测量&#xff0c;σ()激活函数。   逻辑回归主要用于二分类问题的拟合&#xff1a;0≤y^P(y1∣x)≤1&#xff0c;σ(z)如图&#xff1a; ​ 问题&#xff…

华为OD机试 - 最低位排序 - 数组(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…