当前位置: 首页 > news >正文

qt-C++笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解

qt-C++笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解

code review!

文章目录

  • qt-C++笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解
    • 1.示例运行
    • 2.event->pos();详解
    • 3.event->pos()的坐标系原点
    • 4.Qt中的坐标系详解
    • 5.QMainWindow::mousePressEvent(event);详解

1.示例运行

截图时鼠标没截到 (・_・;

在这里插入图片描述

代码

#include <QApplication>
#include <QMainWindow>
#include <QMouseEvent>
#include <QDebug>class MainWindow : public QMainWindow
{
public:MainWindow(QWidget *parent = nullptr) : QMainWindow(parent){setWindowTitle("Right-Click Example");}protected:void mousePressEvent(QMouseEvent *event) override{if (event->button() == Qt::RightButton){QPoint position = event->pos();int x = position.x();int y = position.y();qDebug() << "Mouse clicked at position:" << position;qDebug() << "x-coordinate:" << x;qDebug() << "y-coordinate:" << y;}else{QMainWindow::mousePressEvent(event);}}
};int main(int argc, char *argv[])
{QApplication app(argc, argv);MainWindow window;window.show();return app.exec();
}

2.event->pos();详解

event->pos() 是一个用于获取鼠标事件位置的成员函数。它返回一个 QPoint 对象,表示鼠标事件发生的位置坐标。

在上述代码中,event 是一个指向 QMouseEvent 对象的指针,它表示一个鼠标事件。通过调用 event->pos(),可以获取鼠标事件发生时鼠标的位置坐标。

QPoint 是 Qt 框架提供的一个类,用于表示二维坐标。它具有 x()y() 方法,可用于分别获取 x 和 y 坐标值。

以下是一些关于 event->pos() 的示例用法:

void mousePressEvent(QMouseEvent *event)
{QPoint position = event->pos();int x = position.x();int y = position.y();qDebug() << "Mouse clicked at position:" << position;qDebug() << "x-coordinate:" << x;qDebug() << "y-coordinate:" << y;
}

在上述示例中,首先通过 event->pos() 获取鼠标事件的位置坐标,并将其存储在一个 QPoint 对象 position 中。然后使用 x()y() 方法分别获取 x 和 y 坐标值。最后,通过调试输出将位置坐标和坐标值打印到控制台。

总结来说,event->pos() 是一个用于获取鼠标事件位置的函数,它返回一个 QPoint 对象,表示鼠标事件发生的位置坐标。

3.event->pos()的坐标系原点

event->pos() 返回的坐标是相对于接收鼠标事件的窗口部件的局部坐标系。它表示鼠标事件发生的位置相对于该窗口部件左上角的偏移量。

具体来说,坐标系的原点位于窗口部件的左上角,x 轴向右延伸,y 轴向下延伸。因此,如果 event->pos() 返回的坐标是 (x, y),那么表示鼠标事件发生在窗口部件中的 (x, y) 像素位置。

需要注意的是,窗口部件的坐标系是相对于其父级窗口或容器的。如果窗口部件是应用程序的主窗口,则其坐标系是相对于屏幕的。

如果需要将局部坐标转换为全局坐标(屏幕坐标),可以使用 mapToGlobal() 函数。例如,event->pos().mapToGlobal() 将返回鼠标事件发生位置的全局坐标。

下面是一个示例,展示了如何使用 event->pos() 获取鼠标事件的局部坐标:

void mousePressEvent(QMouseEvent *event)
{QPoint localPos = event->pos();qDebug() << "Local mouse position:" << localPos;
}

在上述示例中,event->pos() 返回的坐标被存储在 QPoint 对象 localPos 中,并通过调试输出打印到控制台。

总结来说,event->pos() 返回的坐标是相对于接收鼠标事件的窗口部件的局部坐标系,原点位于左上角,x 轴向右,y 轴向下延伸。如需将局部坐标转换为全局坐标,可以使用 mapToGlobal() 函数。

4.Qt中的坐标系详解

在Qt中,坐标系用于描述界面元素的位置和大小。Qt使用的坐标系是基于笛卡尔坐标系,具有以下特点:

  1. 坐标原点:Qt的坐标原点通常位于左上角,即(0, 0)。这意味着x轴向右增加,y轴向下增加。这种坐标系也被称为左上角坐标系。

  2. 单位:Qt中的坐标单位通常是像素(Pixel)。每个像素表示屏幕上的一个点,用于测量和定位界面元素的位置和大小。

  3. 窗口坐标系:在窗口中,坐标系的原点通常位于窗口的左上角。窗口的左上角坐标为(0, 0),并且x轴向右延伸,y轴向下延伸。窗口坐标系用于描述窗口内部的界面元素的位置和大小。

  4. 屏幕坐标系:屏幕坐标系是全局的坐标系,用于描述屏幕上的位置。屏幕坐标系的原点通常位于显示器的左上角,与窗口坐标系的原点不一定对齐。屏幕坐标系可以用于将窗口坐标转换为全局坐标以及进行屏幕坐标上的操作。

  5. 父子坐标系:在Qt中,界面元素(例如窗口、小部件)可以形成父子关系。对于子元素,其坐标一般相对于其父元素。子元素的坐标原点位于其父元素的左上角。

  6. 坐标转换:Qt提供了一些函数来进行坐标转换,例如:

    • mapToGlobal():将局部坐标转换为全局坐标。
    • mapFromGlobal():将全局坐标转换为局部坐标。
    • mapToParent():将子元素的局部坐标转换为父元素的坐标。
    • mapFromParent():将父元素的坐标转换为子元素的局部坐标。

总而言之,在Qt中,坐标系用于定位和描述界面元素的位置和大小。默认情况下,Qt使用左上角坐标系,原点位于窗口或界面元素的左上角。了解和理解Qt的坐标系是编写界面布局和处理交互事件的重要基础。

5.QMainWindow::mousePressEvent(event);详解

QMainWindow::mousePressEvent(event) 是一个语句,用于调用基类 QMainWindowmousePressEvent 函数来处理鼠标点击事件。

在代码中的 else 分支中,如果鼠标点击事件的按钮不是右键,那么会执行 QMainWindow::mousePressEvent(event)。这样做的目的是将处理其他类型的鼠标点击事件的责任委托给基类的实现。

基类的 mousePressEvent 函数是 Qt 框架中定义的一个虚函数,可以在子类中进行重写。它用于处理鼠标点击事件的默认行为。通过调用基类的 mousePressEvent(event),可以确保在处理右键点击事件之外的其他类型的鼠标点击事件时,仍保留基类的默认行为。

在这个特定的代码示例中,MainWindow 类继承自 QMainWindow,并重写了 mousePressEvent 函数。当鼠标点击事件的按钮不是右键时,通过调用 QMainWindow::mousePressEvent(event),可以继续执行基类 QMainWindow 的默认处理方式,以保持应用程序的正常行为。

总结来说,QMainWindow::mousePressEvent(event) 是一个语句,用于调用基类 QMainWindowmousePressEvent 函数来处理除右键点击之外的其他类型的鼠标点击事件,以保持基类默认行为的一致性。

相关文章:

qt-C++笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解

qt-C笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解 code review! 文章目录 qt-C笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解1.示例运行2.event->pos();详解3.event->pos()的坐标系原点4.Qt中的坐标系详解5.QMainWindow::mousePressEvent(event);详解 1.示例…...

小程序开发平台源码系统:搭建新的商业体系 附带完整的搭建教程

小程序开发平台源码系统是在移动互联网快速发展的背景下诞生的。随着微信小程序的普及&#xff0c;越来越多的人开始关注小程序的开发与运营。然而&#xff0c;对于很多初学者和小型企业来说&#xff0c;开发一个小程序需要专业的技术知识和大量的时间投入&#xff0c;这无疑是…...

css3新增的伪类有哪些?

CSS3新增的伪类有&#xff1a; :first-of-type&#xff0c;选择属于其父元素的特定类型的第一个子元素。:last-of-type&#xff0c;选择属于其父元素的特定类型的最后一个子元素。:only-of-type&#xff0c;选择属于其父元素的特定类型的唯一子元素。:only-child&#xff0c;选…...

开源软件license介绍与检测

开源License介绍 通俗来讲&#xff0c;开源许可证就是一种允许软件使用者在一定条件内按照需要自由使用和修改软件及其源代码的的法律条款。借此条款&#xff0c;软件作者可以将这些权利许可给使用者&#xff0c;并告知使用限制。这些许可条款可以由个人、商业公司或非赢利组织…...

【LeeCode】142.环形链表II

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数…...

nodejs微信小程序+python+PHP健身房信息管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…...

springboot集成springsecurity

转载自&#xff1a;www.javaman.cn 1、整合springsecurity 添加pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>2、springsecurity认证授权流程…...

脏读、不可重复读、幻读

一、脏读 A事务读取B事务尚未提交的数据&#xff0c;此时如果B事务发生错误并执行回滚操作&#xff0c;那么A事务读取到的数据就是脏数据。就好像原本的数据比较干净、纯粹&#xff0c;此时由于B事务更改了它&#xff0c;这个数据变得不再纯粹。这个时候A事务立即读取了这个脏…...

思维模型 反馈效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。反馈促进改进。 1 反馈效应的应用 1.1 反馈效应在营销中的应用 1 “可口可乐与百事可乐之战” 在 20 世纪 80 年代&#xff0c;可口可乐公司是全球最大的饮料公司之一&#xff0c;其市场…...

【PyTorch】线性回归

文章目录 1. 模型与代码实现2. Q&A 1. 模型与代码实现 模型 y ^ w 1 x 1 . . . w d x d b w ⊤ x b . \hat{y} w_1 x_1 ... w_d x_d b \mathbf{w}^\top \mathbf{x} b. y^​w1​x1​...wd​xd​bw⊤xb. 代码实现 import torch from torch import nn from to…...

硝烟弥漫的科技战场——GPT之战

没想到2023年的双11之后&#xff0c;还能看到如此多的科技圈大佬针对GPT提出火药味十足的讨论和极具戏剧性的表演。 历史回顾&#xff1a; 11月6日&#xff0c;OpenAI发布会&#xff1a;GPT-4 Turbo模型、GPT应用商店、开源Whisper-large-v3等&#xff1b;11月17日&#xff0…...

re:Invent 构建未来:云计算生成式 AI 诞生科技新局面

文章目录 前言什么是云计算云计算类型亚马逊云科技云计算最多的功能最大的客户和合作伙伴社区最安全最快的创新速度最成熟的运营专业能力 什么是生成式 AI如何使用生成式 AI后记 前言 在科技发展的滚滚浪潮中&#xff0c;我们见证了云计算的崛起和生成式 AI 的突破&#xff0c…...

oneApi实现并⾏排序算法

零、OneApi简介 oneAPI是由英特尔推出的一个开放、统一的编程模型和工具集合&#xff0c;旨在简化跨不同硬件架构的并行计算。oneAPI的目标是提供一个统一的编程模型&#xff0c;使开发人员能够使用相同的代码在不同类型的硬件上进行并行计算&#xff0c;包括CPU、GPU、FPGA和…...

语音芯片的BUSY状态指示功能特征:提升用户体验与系统稳定性的关键

在电子产品的音频系统中&#xff0c;语音芯片扮演着至关重要的角色。为了保证音频的流畅播放和功能的正常运行&#xff0c;语音芯片的各种状态指示功能变得尤为重要。其中&#xff0c;BUSY状态指示功能是语音芯片中的一项关键特征&#xff0c;它对于提升用户体验和系统稳定性具…...

Leetcode2661. 找出叠涂元素

Every day a Leetcode 题目来源&#xff1a;2661. 找出叠涂元素 解法1&#xff1a;哈希 题目很绕&#xff0c;理解题意后就很简单。 由于矩阵 mat 中每一个元素都不同&#xff0c;并且都在数组 arr 中&#xff0c;所以首先我们用一个哈希表 hash 来存储 mat 中每一个元素的…...

免费最新6款热门SEO优化排名工具

网站的存在感对于业务和品牌的成功至关重要。在众多网站推广方法中&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;是提高网站可见性的关键。而SEO的核心之一就是关键词排名。为了更好地帮助您优化网站。 SEO关键词排名工具 在如今信息过载的互联网时代&#xff0c;用户…...

绝地求生在steam叫什么?

绝地求生在Steam的全名是《PlayerUnknowns Battlegrounds》&#xff0c;简称为PUBG。作为一款风靡全球的多人在线游戏&#xff0c;PUBG于2017年3月23日正式上线Steam平台&#xff0c;并迅速成为一部热门游戏。 PUBG以生存竞技为核心玩法&#xff0c;玩家将被投放到一个辽阔的荒…...

Elasticsearch:什么是大语言模型(LLM)?

大语言模型定义 大语言模型 (LLM) 是一种深度学习算法&#xff0c;可以执行各种自然语言处理 (natural language processing - NLP) 任务。 大型语言模型使用 Transformer 模型&#xff0c;并使用大量数据集进行训练 —— 因此规模很大。 这使他们能够识别、翻译、预测或生成文…...

Kubernetes1.27容器化部署Prometheus

Kubernetes1.27容器化部署Prometheus GitHub链接根据自己的k8s版本选择对应的版本修改镜像地址部署命令对Etcd集群进行监控&#xff08;云原生监控&#xff09;创建Etcd Service创建Etcd证书的Secret创建Etcd ServiceMonitorgrafana导入模板成功截图 对MySQL进行监控&#xff0…...

fasterxml 注解组装实体

使用 FasterXML Jackson 的注解 JsonTypeInfo 和 JsonSubTypes 可以实现多态类型的处理。在你的 User 类上&#xff0c;你可以添加这些注解来指示 Jackson 如何处理多态类型。 以下是使用 JsonTypeInfo 和 JsonSubTypes 注解的 User 类的修改&#xff1a; import com.fasterx…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...