「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对象:

  1. 默认构造函数:创建一个未初始化的QLine对象。
QLine();
  1. 参数化构造函数:使用两个QPoint对象或四个整数坐标(x1, y1, x2, y2)作为起点和终点来创建QLine对象。
QLine(int x1, int y1, int x2, int y2);
QLine(const QPoint &p1, const QPoint &p2);
  1. 从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类。


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/469739.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏引擎学习第五天

这节貌似没讲什么 视频参考:https://www.bilibili.com/video/BV1Gmm2Y5EwE/ uint8 *A somewhere in memory; uint8 *B somewhere in memory;//BEFORE WE GOT TO HERE int Y *B; // whatever was actually there before the 5 *A 5; int X *B; // 5 //Obviously! Y and …

uniapp分享功能

页面生命周期 https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle onShareTimeline 监听用户点击右上角转发到朋友圈 微信小程序 2.8.1 onAddToFavorites 监听用户点击右上角收藏 微信小程序、QQ小程序 2.8.1 onShareAppMessage 用户点击右上角分享 微信小程序、QQ小程…

小程序中引入下载到本地的iconfont字体图标加载不出来问题解决

我这个是uniapp项目,字体图标都是一样的,在vue项目中web端、uniapp运行到h5都没问题,但是运行到小程序加载不出来,报错如下: 不让用本地路径,所以我们要转为base64编码,这里给大家提供一个工具,它可以把本地字体文件转为base64:transfonter 进入官网后,第一步: …

Sql server 备份还原方法

备份 方法1&#xff0c;选择对应的数据库名-------》右键 任务---------》备份 默认备份类型 完整 文件后缀 .bak 方法2,选择对应的数据库名-------》右键 任务----------》生成脚本 选择要编写的数据库对象(表&#xff0c;视图&#xff0c;存储过程等) 选择对应的 服…

中兴光猫修改SN,MAC,修改地区,异地注册,改桥接,路由拨号

前言 请先阅读上一篇博客获取到光猫超级密码电信光猫获取超级密码 电信光猫天翼网关4.0获取超级密码教程 四川电信光猫 中兴 F1855V2 ZXHN F1855V2 telent权限 实战 实测_天翼4.0光猫超级密码-CSDN博客 修改SN-修改地区&#xff0c;光猫异地注册&#xff0c;设置桥接模式&#…

AI大模型开发架构设计(14)——基于LangChain大模型的案例架构实战

文章目录 基于LangChain大模型的案例架构实战1 LangChain 顶层架构设计以及关键技术剖析LangChain 是什么?LangChain的主要功能是什么&#xff1f;LangChain 顶层架构设计LangChain 典型使用场景&#xff1a;QA 问答系统LangChain 顶层架构设计之 Model I/OLangChain 顶层架构…

Ubuntu 的 ROS 操作系统turtlebot3环境搭建

引言 本文介绍如何在Ubuntu系统中为TurtleBot3配置ROS环境&#xff0c;包括安装和配置ROS Noetic的步骤&#xff0c;为PC端控制TurtleBot3提供操作指南。 安装和配置的过程分为PC设置、系统安装、依赖安装等部分&#xff0c;并在最后进行网络配置&#xff0c;确保PC端能够顺利…

009_SSH_Mysql图书管理系统(学生注册 借书 还书 绵阳)——lwplus87(免费送)

Abstract IV 第1章 概述... 1 1.1 课题背景... 1 1.2 课题意义... 1 1.3 文献综述... 2 1.3.1 技术综述... 2 1.4 总体设计原则... 2 第2章 系统分析... 4 2.1 系统的需求分析... 4 2.2 业务流程分析... 5 2.2.1 系统管理员业务流程分析... 5 2.3 数据流程分析... 7 2.3.1 图书…

微服务电商平台课程三:搭建后台服务

前言 上节课,我们一起完成基础环境搭建,这节课, 我们利用上节课搭建我们电商平台.这节课我们采用开源代码进行搭建, 不论大家后续从事什么行业,都要学会站在巨人的肩膀上. 之前所说的,整个微服务平台的技术栈也是非常多的, 由于时间和效果的关系, 我们不可能从每个技术一步一…

解决MySQL中整型字段条件判断禁用不生效的问题

MySQL中&#xff0c;当尝试将整数与字符串进行比较时&#xff0c;数据库可能会尝试将字符串转换为整数。在这种情况下&#xff0c;空字符串会被转换为整数0&#xff0c;所以0 ! 会被解释为0 ! 0&#xff0c;结果自然是false。 在开发过程中&#xff0c;我们经常需要对数据库中的…

大数据技术在金融风控中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 大数据技术在金融风控中的应用 大数据技术在金融风控中的应用 大数据技术在金融风控中的应用 引言 大数据技术概述 定义与原理 发…

微信小程序_模板与配置_day2

一、目标 A. 能够使用WXML模板语法渲染页面结构 B. 能够使用WXSS样式装饰页面结构 C. 能够使用app.json对小程序进行全局性配置 D. 能够使用page.json对小程序页面进行个性化配置 E. 能够知道如何发起网络数据请求 二、目录 A. WXML模板语法 B. WXSS模板样式 C. 全局配置 D.…

网络安全技术在能源领域的应用

摘要 随着信息技术的飞速发展&#xff0c;能源领域逐渐实现了数字化、网络化和智能化。然而&#xff0c;这也使得能源系统面临着前所未有的网络安全威胁。本文从技术的角度出发&#xff0c;探讨了网络安全技术在能源领域的应用&#xff0c;分析了能源现状面临的网络安全威胁&a…

设计模式-七个基本原则之一-单一职责原则 + SpringBoot案例

单一职责原理:(SRP) 面向对象七个基本原则之一 清晰的职责&#xff1a;每个类应该有一个明确的职责&#xff0c;避免将多个责任混合在一起。降低耦合&#xff1a;通过将不同的职责分开&#xff0c;可以降低类之间的耦合度&#xff0c;提高系统的灵活性。易于维护&#xff1a;当…

nvm 安装指定node版本时--list 显示为空

1、安装nvm 2、查看nvm 可安装的list 语句&#xff1a; nvm list available 注&#xff1a; 可能需要安装的不在list 中&#xff0c;可直接 用命令语句 安装指定版本 nvm install 12.18.1 如果安装list 显示为空 找到安装路径下的 settings.txt,最后两行没有的添加上&#x…

[HNCTF 2022 Week1]ret2shellcode-好久不见12

知识点&#xff1a;1.shellcode获取 获取Shellcode的两种方法&#xff1a; 手写&#xff1a;想办法调用execve("/bin/sh",null,null) 传入字符串&#xff1a;/bin///sh 系统调用execve pwntools自动生成&#xff1a; 先指定context.arch"i386/amd64" …

实现3D热力图

实现思路 首先是需要用canvas绘制一个2D的热力图&#xff0c;如果你还不会&#xff0c;请看json绘制热力图。使用Threejs中的canvas贴图&#xff0c;将贴图贴在PlaneGeometry平面上。使用着色器材质&#xff0c;更具json中的数据让平面模型 拔地而起。使用Threejs内置的TWEEN&…

力扣 LeetCode 977. 有序数组的平方(Day1:数组)

解题思路&#xff1a; 方法一&#xff1a;先平方再快排 方法二&#xff1a;双指针 因为可能有负数&#xff0c;所以对于一个数组 [ -5 , -3 , 0 , 2 , 4 ] 可以从两边向内靠拢&#xff0c;最大值一定出现在两端 设置指针 i 和指针 j 分别从左右两边靠拢 因为要从小到大排序…

[vulnhub] DarkHole: 1

https://www.vulnhub.com/entry/darkhole-1,724/ 端口扫描主机发现 探测存活主机&#xff0c;184是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-08 09:59 CST Nmap scan report for 192.168.75.1 Host is up (0.00027s latency). MA…