「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…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...