「QT」几何数据类 之 QLine 整型直线类
✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
📌文章专栏 | ||
「QT」QT5程序设计 | ||
📚全部专栏 | ||
「VS」Visual Studio | 「C/C++」C/C++程序设计 | 「UG/NX」BlockUI集合 |
「Win」Windows程序设计 | 「DSA」数据结构与算法 | 「UG/NX」NX二次开发 |
「QT」QT5程序设计 | 「File」数据文件格式 | 「PK」Parasolid函数说明 |
「Math」探秘数学世界 |
目录
- QLine类详解
- 一、引言
- 二、使用范围
- 三、类的头文件
- 四、类的构造介绍
- 五、共有函数介绍
- 六、Static函数介绍
- 七、运算符重载
- 八、详细代码举例
QLine类详解
一、引言
QLine是Qt框架中的一个核心类,用于表示二维平面上的直线段。与QLineF不同,QLine使用整数坐标(QPoint)来表示起点和终点,这使得它在处理像素级精度的图形绘制和界面布局时更加高效。QLine类提供了丰富的功能,包括直线长度的计算、直线的平移、判断点与直线的关系等,是Qt图形编程和界面设计中的基础工具之一。
官方文档:https://doc.qt.io/qt-5/qline.html
二、使用范围
QLine类广泛应用于Qt的图形界面编程中,特别是在需要精确绘制直线、计算直线长度、进行直线变换、判断点与直线关系等场景中。由于QLine使用整数坐标,因此它非常适合于处理像素级的图形操作,如绘制网格线、边框、分割线等。
三、类的头文件
要使用QLine类,需要包含其头文件<QLine>
。这个头文件定义了QLine类的所有成员和函数,使得开发者可以在自己的Qt应用程序中使用该类。
#include <QLine>
四、类的构造介绍
QLine类提供了多种构造函数,允许以不同的方式创建QLine对象:
- 默认构造函数:创建一个未初始化的QLine对象。
QLine();
- 参数化构造函数:使用两个QPoint对象或四个整数坐标(x1, y1, x2, y2)作为起点和终点来创建QLine对象。
QLine(int x1, int y1, int x2, int y2);
QLine(const QPoint &p1, const QPoint &p2);
- 从QLineF转换的构造函数:虽然QLineF使用浮点数坐标,但QLine类提供了从QLineF到QLine的转换构造函数,允许将QLineF对象转换为QLine对象(可能会丢失精度)。
QLine(const QLineF &linef);
五、共有函数介绍
QLine类提供了丰富的共有函数,用于获取直线的属性、进行几何运算等。以下是一些常用的共有函数:
QPoint p1() const
:返回直线的起点。QPoint p2() const
:返回直线的终点。void setP1(const QPoint &p1)
:设置直线的起点。void setP2(const QPoint &p2)
:设置直线的终点。int length() const
:返回直线的长度(整数)。int dx() const
:返回终点的x坐标与起点的x坐标之差。int dy() const
:返回终点的y坐标与起点的y坐标之差。QLine translated(int dx, int dy) const
:返回沿向量(dx, dy)平移后的直线。QPoint pointAt(int t) const
:返回参数化直线上的点,其中t是介于0和直线长度之间的整数,表示从起点到终点的距离。但需要注意的是,这个函数的行为可能与预期不同,因为它直接基于长度进行插值,而不是基于比例。在实际使用中,可能需要使用其他方法来获取特定比例的点。
注意:pointAt
函数的行为在QLine中可能不是直观的,因为它基于长度进行插值,而不是基于比例。如果你需要基于比例获取点,你可能需要手动计算或使用QLineF类。
六、Static函数介绍
QLine类提供了一些静态函数,用于执行与QLine对象相关的通用操作。这些函数不需要创建QLine对象就可以直接使用。以下是一些常用的静态函数:作者:CSND@何曾参静 谧
static int fromPolar(int length, int angle, int *x, int *y)
:根据极坐标(长度和角度)计算直角坐标(x, y)。这个函数将结果存储在提供的指针中,并返回计算出的x坐标(尽管返回值可能不是必需的,因为这是一个静态函数,并且它已经通过指针修改了x和y的值)。
七、运算符重载
QLine类重载了多个运算符,以便进行直线之间的比较和算术运算。以下是一些重载的运算符:
bool operator==(const QLine &line) const
:判断两条直线是否相等(基于起点和终点的坐标)。bool operator!=(const QLine &line) const
:判断两条直线是否不相等。
八、详细代码举例
以下是一个使用QLine类的详细代码示例,展示了如何创建QLine对象、获取直线的属性、进行几何运算以及判断点与直线的关系。
#include <QCoreApplication>
#include <QLine>
#include <QPoint>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建QLine对象QLine line(QPoint(10, 20), QPoint(40, 60));// 获取直线的属性QPoint start = line.p1();QPoint end = line.p2();int length = line.length();int dx = line.dx();int dy = line.dy();qDebug() << "Start Point:" << start;qDebug() << "End Point:" << end;qDebug() << "Length:" << length;qDebug() << "Dx:" << dx;qDebug() << "Dy:" << dy;// 进行几何运算QLine translatedLine = line.translated(10, -10);qDebug() << "Translated Line (Start, End):" << translatedLine.p1() << "," << translatedLine.p2();// 判断点与直线的关系(此处示例为点是否在直线上,但QLine没有直接提供此功能,需自行计算)// 我们可以计算点到直线两端点的距离之和,如果等于直线的长度,则点在直线上(考虑整数坐标的精度问题)QPoint testPoint(25, 40); // 这个点实际上在直线上(考虑整数坐标)int distanceToStart = QPoint(line.p1().x() - testPoint.x(), line.p1().y() - testPoint.y()).manhattanLength();int distanceToEnd = QPoint(line.p2().x() - testPoint.x(), line.p2().y() - testPoint.y()).manhattanLength();if (distanceToStart + distanceToEnd == length) {qDebug() << "Test Point is on the line.";} else {qDebug() << "Test Point is not on the line.";}// 注意:上述判断方法存在精度问题,因为对于非整数坐标的点,这种方法可能会失败。// 在实际应用中,可能需要使用更精确的方法来判断点是否在直线上,比如计算点到直线的垂直距离。// 但由于QLine使用整数坐标,这种精确计算通常不是必需的。return a.exec();
}
作者:CSND@何曾参静谧
在这个示例中,我们首先创建了一个QLine对象line
,并获取了它的起点、终点、长度以及x和y方向的差值。然后,我们进行了平移运算,得到了一个新的QLine对象translatedLine
。此外,我们还尝试判断一个测试点是否在直线上(通过计算点到直线两端点的曼哈顿距离之和是否等于直线的长度来进行近似判断)。需要注意的是,由于QLine使用整数坐标,因此这种方法在大多数情况下是有效的,但在处理非整数坐标时可能会失败。在实际应用中,如果需要更精确的判断,可能需要使用其他方法或考虑使用QLineF类。
相关文章:

「QT」几何数据类 之 QLine 整型直线类
✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...
day58 图论章节刷题Part09(dijkstra(堆优化版)、Bellman_ford 算法)
dijkstra(堆优化版) 朴素版的dijkstra解法的时间复杂度为 O(n^2),时间复杂度只和 n(节点数量)有关系。如果n很大的话,可以从边的角度来考虑。因为是稀疏图,从边的角度考虑的话,我们在堆优化算法中最好使用…...
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(1)
前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 本章是去答案版本。带答案的版本在下…...

智能出行助手:SpringBoot共享汽车管理平台
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理共享汽车管理系统的相关信息成为必然。开发…...

【月之暗面kimi-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …...
Flink实现实时数据处理
代码如下: #!/usr/bin/python # -*- coding: UTF-8 -*-from pyflink.datastream import StreamExecutionEnvironment from pyflink.table import StreamTableEnvironment, EnvironmentSettings, DataTypes# 初始化执行环境 s_env StreamExecutionEnvironment.get_…...

11.9.2024刷华为
文章目录 HJ31 单词倒排HJ32 密码提取语法知识记录 傻逼OD题目又不全又要收费,看毛线,莫名奇妙 HW这叼机构别搁这儿害人得不得? 我觉得我刷完原来的题目 过一遍华为机考的ED卷出处,就行了 HJ31 单词倒排 游戏本做过了好像 HJ3…...
Chromium 中chrome.system.storage扩展接口定义c++
一、chrome.system.storage 您可以使用 chrome.system.storage API 查询存储设备信息,并在连接和分离可移动存储设备时收到通知。 权限 system.storage 类型 EjectDeviceResultCode 枚举 "success" 移除命令成功执行 - 应用可以提示用户移除设备。…...

【Qt聊天室客户端】登录窗口
1. 验证码 具体实现 登录界面中创建验证码图片空间,并添加到布局管理器中 主要功能概述(创建一个verifycodewidget类专门实现验证码操作) 详细代码 // 头文件#ifndef VERIFYCODEWIDGET_H #define VERIFYCODEWIDGET_H#include <QWidget>…...
如何显示模型特征权重占比图【数据分析】
可视化模型的特征权重 1、流程 1、导入库: numpy:用于处理数组和矩阵。 matplotlib.pyplot:用于绘图。 sklearn.datasets:用于加载数据集。 sklearn.ensemble.RandomForestClassifier:用于训练随机森林模型。2、加载数据集: 使用load_iris函数加载Iris数据集。3、训练模…...

Ubuntu24安装MySQL
下载deb包: 先更新系统包: sudo apt update sudo apt update -y下载mysql: wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb 安装deb包: sudo dpkg -i mysql-apt-config_0.8.17-1_all.deb目前mysql还没有正式支持Ubun…...
微服务架构面试内容整理-Eureka
Spring Cloud Netflix 是一个为构建基于 Spring Cloud 的微服务应用提供的解决方案,利用 Netflix 的开源组件来实现常见的分布式系统功能。以下是 Spring Cloud Netflix 的一些主要组件和特点: 服务注册与发现:Eureka 是一个 RESTful 服务,用于注册和发现微服务。服务实例在…...

qt QErrorMessage详解
1、概述 QErrorMessage是Qt框架中用于显示错误消息的一个对话框类。它提供了一个简单的模态对话框,用于向用户显示错误或警告消息。QErrorMessage通常用于应用程序中,当需要向用户报告错误但不希望中断当前操作时。它提供了一个标准的错误消息界面&…...
SpringBoot 将多个Excel打包下载
在Spring Boot应用中,如果你需要将多个Excel文件打包成一个ZIP文件并提供下载,你可以使用一些Java库来帮助完成这个任务。这里我将展示如何使用Apache POI来生成Excel文件,以及使用Java.util.zip来创建ZIP文件,并通过Spring Boot的…...

分页存储小总结
知识点: 什么是分页存储? 将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个“页框”(页框页帧内存块物理块物理页面)。每个页框有一个编号,即“页框号”(…...

Star-CCM+应用篇之动力电池温度场仿真操作流程与方法
1 动力电池温度场仿真项目 电池包内模组温度分布、电芯温度分布、温升速率、充电时间等。 2 动力电池温度场仿真分析流程图 图1 电池包热流场分析流程 3 动力电池温度场仿真参数需求 类别...
Spring Boot应用开发:从入门到精通
Spring Boot应用开发:从入门到精通 Spring Boot是Spring框架的一个子项目,旨在简化Spring应用的初始搭建和开发过程。通过自动配置和约定大于配置的原则,Spring Boot使开发者能够快速构建独立的、生产级别的Spring应用。本文将深入探讨Sprin…...

【JAVA项目】基于jspm的【医院病历管理系统】
技术简介:采用jsp技术、MySQL等技术实现。 系统简介:通过标签分类管理等方式,实现管理员;个人中心、医院公告管理、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、预约挂号管理、门诊病历管理、就诊评价管理、…...

Python中的常见配置文件写法
在软件开发过程中,开发者常常需要利用一些固定的参数或常量。对于这些相对恒定且频繁使用的元素,一种常见的做法是将它们集中存储在一个特定的文件中,以避免在多个模块代码中重复定义,从而维护核心代码的清晰度和整洁性。 具体而…...

语义分割实战——基于PSPnet神经网络动物马分割系统源码
第一步:准备数据 动物马分割数据,总共有328张图片,里面的像素值为0和1,所以看起来全部是黑的,不影响使用 第二步:搭建模型 psp模块的样式如下,其psp的核心重点是采用了步长不同,po…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...