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

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

文章目录

  • 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 函数来处理除右键点击之外的其他类型的鼠标点击事件,以保持基类默认行为的一致性。

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

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

相关文章

【SpringMVC】Spring Web MVC入门(一)

文章目录 前言什么是Spring Web MVC&#xff1f;什么是MVC什么是Spring MVC&#xff1f; Spring Boot 和 Spring MVC 的区别什么是Spring Boot&#xff1f;关系和区别 Spring MVC 学习注解介绍1. SpringBootApplication2. RestController3. RequestMapping3.1 RequestMapping 使…

css所有属性介绍

文章目录 1️⃣ CSS属性介绍1.1 CSS3 动画属性&#xff08;Animation&#xff09;1.2 CSS 背景属性&#xff08;Background&#xff09;1.3 CSS 边框属性&#xff08;Border 和 Outline&#xff09;1.4 Box 属性1.5 Color 属性1.6 Content for Paged Media 属性1.7 CSS 尺寸属性…

CyclicBarrier实战应用——批量数据多线程协调异步处理(主线程执行事务回滚)

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; CCyclicBarrier实战应用——批量数据多线程协调异步处理(主线程执行事务…

Linux学习笔记之七(shell脚本的基本语法)

Shell 1、Shell脚本2、常用运算符2、特殊语法4、关于变量的一些命令4.1、echo4.2、export4.3、read4.4、declare/typeset4.5、local4.6、unset 5、基本逻辑语法5.1、if判断5.2、for循环5.3、while循环5.4、case语句 6、函数定义7、多脚本链接 1、Shell脚本 学习shell脚本开发之…

独孤思维:工资加了1000,却被骂懦弱无能

凡是为了工作镀金学历的人&#xff0c;都是为了逃避社会&#xff0c;都是懦弱无能的表现。 昨天有个读者跑来跟我说&#xff0c;本科毕业入职了一家直播公司做场控&#xff0c;结果做了一段时间发现这玩意就算是个高中生都会做。 太没意思了。 所以&#xff0c;决定辞职&…

C-语言每日刷题

目录 [蓝桥杯 2015 省 A] 饮料换购 题目描述 输入格式 输出格式 输入输出样例 # [蓝桥杯 2023 省 A] 平方差 题目描述 输入格式 输出格式 输入输出样例 说明/提示 【样例说明】 [NOIP2001 普及组] 数的计算 题目描述 输入格式 输出格式 输入输出样例 说明/提示 样例 1 解释 数据…

1.1.2.列表标签

一.无序列表 1.格式 ul 是Unordered List(无序列表)的缩写。列表里的项目用 <li> 标签记述。 <ul type"square"><li>1</li><li>2</li><li>3</li> </ul> 2.type属性 Disc是ul中type属性的默认值&#xff0…

【C++】多线程(二):std::mutex std::atomic的使用

这篇文章接着上一篇&#xff0c;继续介绍C中的多线程。 推荐先阅读上一篇 【C】多线程&#xff08;一&#xff09;&#xff1a;std::thread的使用 互斥 我们前面的函数&#xff0c;无论是线程之间&#xff0c;还是线程和主线程之间&#xff0c;都是没有数据交换的。 接下来让…

RK3568平台开发系列讲解(Linux系统篇)netlink 监听广播信息

** 🚀返回专栏总目录 文章目录 一、什么是netlink 机制二、netlink 的使用2.1、创建 socket2.2、绑定套接字2.3、接收数据沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍如何通过 netlink 监听广播信息。 一、什么是netlink 机制 Netlink 是 Linux 内核中…

企业计算机服务器locked1勒索病毒数据恢复,locked1勒索病毒解密流程

随着计算机技术的不断发展&#xff0c;越来越多的企业走向数字化办公时代&#xff0c;计算机技术为企业的生产运营提供了有利条件&#xff0c;但也为企业带来了网络安全威胁。在本月&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的速达办公软件遭到了lo…

zemax之初级像差理论与像差校正——像散

1.像散的概念 像散是指轴外物点发出的锥形光束通过光学系统聚焦后&#xff0c;光斑在像面上子午方向与弧矢方向的不一致性。轴外视场光束通过光瞳后&#xff0c;在子午方向与弧矢的光程不相等&#xff0c;造成两个方向光斑分离所形成的弥散斑&#xff0c;称为光学系统的像散。…

LeetCode二分查找:x 的平方根

LeetCode二分查找&#xff1a;x 的平方根 题目描述 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 **注意&#xff1a;**不允许使用任何内置指数函数和算符&#x…

js中setinterval怎么用?怎么才能让setinterval停下来?

setinterval()是定时调用的函数&#xff0c;可按照指定的周期&#xff08;以毫秒计&#xff09;来调用函数或计算表达式。 setinterval()的作用是在播放动画的时&#xff0c;每隔一定时间就调用函数&#xff0c;方法或对象。 setInterval() 方法会不停地调用函数&#xff0c;…

Leetcode刷题详解——乘积最大子数组

1. 题目链接&#xff1a;152. 乘积最大子数组 2. 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的非空连续子数组&#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位…

安全SCDN对网站蜘蛛抓取有影响吗,使用SCDN对百度蜘蛛抓取有否好处

目前网站使用德迅云安全SCDN情况非常普遍&#xff0c;但也有些客户是第一次了解使用SCDN&#xff0c;会有担心一个百度蜘蛛抓取问题&#xff0c;担心使用了SCDN之后会影响百度蜘蛛抓取。其实是完全不必担心这个的&#xff0c;从理论上来讲&#xff0c;使用了SCDN并不会影响百度…

【Collection - LinkedList源码解析】

本文主要对Collection - LinkedList进行源码解析。 Collection - LinkedList源码解析 概述LinkedList实现 底层数据结构构造函数getFirst(), getLast()removeFirst(), removeLast(), remove(e), remove(index)add()addAll()clear()Positional Access 方法查找操作Queue 方法Deq…

【大学英语视听说上】Mid-term Test 2

Section A 【短篇新闻1】 You probably think college students are experts at sleeping, but parties, preparations for tests, personal problems and general stress can rack a students sleep habits, which can be bad for the body and the mind. Texas Tech Univer…

JavaWeb(一)

一、Javaweb介绍 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 JavaWeb&#xff1a;使用Java技术进行web互联网开发。 总结: 1、JavaWeb就是使用Java技术进行web互联网开发 2、一个web项目包含三个部分&#xff0c;分别…

【论文阅读】-使用小波变换进行数字图像模糊检测

使用小波变换进行数字图像模糊检测 文章目录 使用小波变换进行数字图像模糊检测1、论文提出的背景2、论文提出的模糊检测方案2.1 不同边缘的模糊效果2.2 边缘类型和锐度检测2.3 方案实现步骤3、论文方案Python实现4、实验结果及总结本文将详细介绍 Hanghang Tong 、Mingjing Li…

分页助手入门以及小bug,报sql语法错误

导入坐标 5版本以上的分页助手 可以不用手动指定数据库语言&#xff0c;它会自动识别 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.2</version> </dependency&g…