【QT入门】Qt自定义控件与样式设计之鼠标相对、绝对位置、窗口位置、控件位置

news2024/11/16 5:45:53

往期回顾

【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-CSDN博客

【QT入门】Qt自定义控件与样式设计之qss的加载方式-CSDN博客

【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件-CSDN博客

【QT入门】Qt自定义控件与样式设计之鼠标相对、绝对位置、窗口位置、控件位置

这里我们主要是需要明确Qt的坐标系组成,熟悉相关相对绝对函数即可。

一、鼠标位置基本概念

1、桌面原点(0, 0)

桌面原点(0, 0),在桌面左上角。

2、应用程序原点(0,0)

应用程序原点(0,0),在应用程序左上角。

一般都是x向左为正, y向下为正

3、绝对位置

相对于电脑桌面左上角的位置,也就是相对于桌面原点的位置

4、相对位置

相对于应用程序左上角的位置,也就是相对于应用程序原点的位置

二、鼠标、控件、应用程序窗口的位置函数

1、鼠标的位置

1.1●QCursor:pos()

该函数返回值为鼠标相对于桌面左上角的绝对位置

当我们重写mousePressEvent这个方法时:

1.2●mousePressEvent的参数event的位置  
(1)event-> pos()的返回值为鼠标相对于应用程序的位置

(2)event- > globalPos()返回值为相对于桌面原点的位置,绝对位置。(跟QCursor:pos()结果是一样的)

2、控件的位置 

2.1QPoint p = ui.pushButton-> pos();

返回值为相对位置,也就是按钮控件相对于应用窗口原点的位置 

2.2QPoint p = ui.pushButton-> mapToGlobal(QPoint(0, 0)); 

返回值为绝对位置,也就是按钮相对于桌面原点的绝对位置

2.3QRect rect. = ui.pushButton-rect();

这个函数的返回值为控件的大小。

3、应用程序窗口的位置

3.1QRect rect = m_pDIg-> geometry(); 

返回值为绝对位置,也就是对话框相对于桌面坐标原点的rect。

3.2QRect rect= m_pDIg-> pos();

返回值为相对位置。

3.3QRect rect = m_pDlg-> rect);

返回值为应用窗口的大小 

三、示例

我们通过调用这一系列方法,实现点击鼠标时控制台打印输出对应被点击位置的坐标。

1、最终效果

2、完整实现代码

void Widget::mousePressEvent(QMouseEvent *event)
{
    qDebug() << QCursor::pos();  //鼠标绝对位置,相对于桌面左上角的位置

    //鼠标相对于应用程序的位置,相对位置
    qDebug() << "event->pos()         " << event->pos();
    //鼠标相对于桌面原点的位置,绝对位置
    qDebug() << "event->globalPos()   " << event->globalPos();
}

void Widget::on_pushButton_clicked()
{
    //按钮控件相对于应用窗口原点的位置
    qDebug() << u8"控件相对位置" << ui->pushButton->pos();

    //按钮相对于桌面原点的绝对位置
    QPoint jPos = ui->pushButton->mapToGlobal(QPoint(0,0));
    qDebug() << u8"控件绝对位置" << jPos;

    //控件的大小,长*宽的大小
    QRect rect = ui->pushButton->rect();
    qDebug() << rect;

    //窗口相对于桌面坐标原点的位置
    qDebug() << u8"窗口绝对位置" << this->geometry();  // 绝对位置
    
    //窗口的大小,长*宽的大小
    qDebug() << u8"窗口矩形" << this->rect();

    //TempDialog *dlg = new TempDialog(this);
    std::unique_ptr<TempDialog> dlg(new TempDialog(this));
    
    //如何让弹出的对话框位置在按钮左边对齐
    dlg->move(jPos.x() - dlg->width(), jPos.y());

    dlg->exec();
}

注意:

这里用了一个智能指针,这个要说一下,由于我们是自己创建了一个TempDialog类,如果不用智能指针,那么关闭窗口后他是不会自动销毁的,就会造成内存泄漏

当然如果创建的时候指定了this,那么后面关闭对话框时不会析构,但是关闭窗口时就会把对话框一起析构掉,也不会出现内存泄漏问题。

推荐还是用智能指针,就不用考虑内存泄漏的问题了。


以上,就是鼠标、控件、应用程序的位置简单介绍

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

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

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

相关文章

YOLOV5 + 双目相机实现三维测距(新版本)

文章目录 YOLOV5 双目相机实现三维测距&#xff08;新版本&#xff09;1. 项目流程2. 测距原理3. 操作步骤和代码解析4. 实时检测5. 训练6. 源码下载 YOLOV5 双目相机实现三维测距&#xff08;新版本&#xff09; 本文主要是对此篇文章做一些改进&#xff0c;以及解释读者在…

MySQL 实例employee表综合查询

目录 表关系图&#xff1a; 例题&#xff1a; 1.查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。 2.列出所有员工的姓名及其直接上级的姓名。 3.列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。 4.列出部门名称和这些部门的员工信…

【进阶六】Python实现SDVRPTW常见求解算法——离散粒子群算法(DPSO)

基于python语言&#xff0c;采用经典离散粒子群算法&#xff08;DPSO&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. …

AI大模型探索之路-提升篇2:一文掌握AI大模型的核心-注意力机制

目录 前言 一、注意力机制简介 二、注意力机制的工作原理 三、注意力机制的变体 1、自注意力&#xff08;Self-Attention&#xff09; 2、双向注意力&#xff08;Bidirectional Attention&#xff09; 3、多头注意力&#xff08;Multi-Head Attention&#xff09; ​4、…

缺失msvcr110.dll要怎么处理?快捷的修复msvcr110.dll方法

当你在使用电脑进行工作或娱乐时&#xff0c;可能会突然遇到一个错误提示&#xff1a;“程序无法启动&#xff0c;因为电脑中缺失msvcr110.dll”。这样的情况不仅会打断你的活动&#xff0c;还可能带来一定程度的不便。面对这个在Windows操作系统中相对常见的问题&#xff0c;其…

执行npm命令一直出现sill idealTree buildDeps怎么办?

一、问题 今天在运行npm时候一直出项sill idealTree buildDeps问题 二、 解决 1、网上查了一下&#xff0c;有网友说先删除用户界面下的npmrc文件&#xff08;注意一定是用户C:\Users\{账户}\下的.npmrc文件下不是nodejs里面&#xff09;&#xff0c;进入到对应目录下&#x…

汇编语言知识点整理(应付考试专用,想学习找其他的)

1 基础知识 1.1 信息在计算机内部的表示和存储 1.1.1 信息存储的基本概念 信息在计算机内部是以二进制数据的形式在存储器中存取的。介绍两个基本概念&#xff1a; 位&#xff08;Bit&#xff09; 计算机中最小的数据单位&#xff0c;一位有0、1两状态。Bit是计算机中最小…

【opencv】示例-stiching.cpp 图像拼接

#include "opencv2/imgcodecs.hpp" // 导入opencv图像编码功能库 #include "opencv2/highgui.hpp" // 导入opencv高层用户界面功能库 #include "opencv2/stitching.hpp" // 导入opencv图像拼接功能库#include <iostream> // 导入输入输出…

聚观早报 | 哪吒L上市定档;iPhone 16最新高清渲染图

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月10日消息 哪吒L上市定档 iPhone 16最新渲染图 华为太空表与问界M9联动 蔚来万里长城加电风景线正式贯通 Red…

传统图机器学习的特征工程-节点

传统图机器学习&#xff08;人工特征工程机器学习&#xff09; 结点&#xff0c;连接&#xff0c;子图都可以有特征 特征分类&#xff1a; 属性特征&#xff1a;本身存在的特征 连接特征&#xff1a;在图中和其他结点连接的特征 传统的机器学习模型&#xff1a; 特征工程&a…

车联网大数据与人工智能一体化:开启智慧出行新时代

随着物联网技术的快速发展&#xff0c;车联网已经成为了汽车行业的重要趋势之一。而在车联网的发展过程中&#xff0c;大数据和人工智能的应用也日益成为关键因素。本文将探讨如何将大数据与人工智能一体化应用于车联网&#xff0c;以实现智慧出行的目标。 尤其是近来国内的华为…

二叉树层序遍历(返回一个不定长二维数组)

力扣_二叉树的层序遍历 题目中要求我们返回一个二维数组 List是一个接口&#xff0c;List<List<Integer>>就代表&#xff1a; 在List这个类型的数组中&#xff0c;存储着类型为List<Integer>类型的元素&#xff0c;而List<Integer>又是一个存储着Int…

【Unity】Feature has expired(H0041)

【背景】 在一台很久不用的电脑上更新了个人License&#xff0c;并导入了云项目&#xff0c;打开时却报错&#xff1a; 【分析】 网上查说要删缓存等等&#xff0c;试过都不行。重装Hub也不行。 这种环境类型的原因很难从信息入手定位错误。 所以我自己检查项目上有什么问题…

【c 语言】函数前面的返回类型

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

电商技术揭秘二十四:无人仓储与自动化技术

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台…

【Web】WUSTCTF 2020 部分题解

目录 [WUSTCTF 2020]朴实无华 [WUSTCTF 2020]CV Maker [WUSTCTF 2020]颜值成绩查询 [WUSTCTF 2020]朴实无华 访问/robots.txt 访问/fAke_f1agggg.php 抓包看响应头看到/f14g.php 访问/f14g.php 简单的bypass&#xff0c;不解释了 payload: ?num2019e1&md50e2159620…

223 基于matlab的结构有限元分析

基于matlab的结构有限元分析。包括基于4节点四面体单元的空间块体分析、基于4节点四边形单元的矩形薄板分析、基于3节点三角形单元的矩形薄板分析、三梁平面框架结构的有限元分析、四杆桁架结构的有限元分析、基于8节点六面体单元的空间块体分析。每个程序都要相应的文档说明。…

NODE MCU (ESP8285-ESP8266)用Arduino lDE 2.3.2烧录系统后串口监控不打印问题

问题: Arduino lDE 2.3.2,集合DOIT ESP-Mx DevKit板子,烧录代码后,串口监视器 打印不出来调试数据 分析: Arduino lDE 2.3.2工具提示,不支持调试 板载flash按钮无需按下,即可烧录系统,由于烧录和调试共用串口,所以怀疑是Arduino lDE 2.3.2在烧录时设置了串口的配置…

Vue3(三):生命周期、路由、自定义hooks

这里终于明白了为什么一直有这个语法报错&#xff0c;就是在提示你哪里错的地方上方注释一行/*eslint-disable*/&#xff0c;之前一直警告这个错误感谢老师&#xff01; 一、vue2和vue3生命周期 还有一个问题就是父组件和子组件哪个先挂载完毕呢&#xff1f;答案是子组件先挂…

从零搭建部署最新AI系统源码ChatGPT网站AI绘画系统,图文详细搭建部署教程文档,Suno-AI音乐生成大模型

一、系统前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…