鼠标事件和滚轮事件

1. 介绍

        QMouseEvent类用来表示一个鼠标事件,当在窗口部件中按下鼠标或者移动鼠标指针时,都会产生鼠标事件。利用QMouseEvent类可以获知鼠标是哪个键按下了,还有鼠标指针的当前位置等信息。通常是重定义部件的鼠标事件处理函数来进行一些自定义的操作。

        QWheelEvent类用来表示鼠标滚轮事件,在这个类中主要是获取滚轮移动的方向和距离。

2. 实例

//widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;QPointF offset; //用来储存鼠标指针位置与窗口位置的差值protected:void mousePressEvent(QMouseEvent *event) override;    //一些重新实现的事件处理函数void mouseReleaseEvent(QMouseEvent *event) override;void mouseDoubleClickEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void wheelEvent(QWheelEvent *event) override;};#endif // WIDGET_H
//widget.cpp
#include <QDebug>
#include "widget.h"
#include "ui_widget.h"
#include <QMouseEvent>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QCursor cursor;                      // 创建光标对象cursor.setShape(Qt::OpenHandCursor); // 设置光标形状setCursor(cursor);                   // 使用光标
}Widget::~Widget()
{delete ui;
}void Widget::mousePressEvent(QMouseEvent *event) // 鼠标按下事件
{if(event->button() == Qt::LeftButton){       // 如果是鼠标左键按下QCursor cursor;cursor.setShape(Qt::ClosedHandCursor);QApplication::setOverrideCursor(cursor); // 使鼠标指针暂时改变形状offset = event->globalPos() - pos();    // 获取指针位置和窗口位置的差值qDebug() << "鼠标左键按下事件";}else if(event->button() == Qt::RightButton){ // 如果是鼠标右键按下QCursor cursor(QPixmap("../mymouseevent/logo.png"));QApplication::setOverrideCursor(cursor);// 使用自定义的图片作为鼠标指针qDebug() << "鼠标右键按下事件";}
}void Widget::mouseMoveEvent(QMouseEvent *event) // 鼠标移动事件
{if(event->buttons() & Qt::LeftButton){      // 这里必须使用buttons()QPointF temp;temp = event->globalPos() - offset;move(temp.x(), temp.y());// 使用鼠标指针当前的位置减去差值,就得到了窗口应该移动的位置qDebug() << "鼠标移动事件";}
}void Widget::mouseReleaseEvent(QMouseEvent *event) // 鼠标释放事件
{Q_UNUSED(event);QApplication::restoreOverrideCursor();         // 恢复鼠标指针形状qDebug() << "鼠标释放事件";
}void Widget::mouseDoubleClickEvent(QMouseEvent *event) // 鼠标双击事件
{if(event->button() == Qt::LeftButton){             // 如果是鼠标左键按下if(windowState() != Qt::WindowFullScreen)      // 如果现在不是全屏setWindowState(Qt::WindowFullScreen);      // 将窗口设置为全屏else setWindowState(Qt::WindowNoState);        // 否则恢复以前的大小qDebug() << "鼠标双击事件";}
}void Widget::wheelEvent(QWheelEvent *event)    // 滚轮事件
{if(event->angleDelta().y() > 0){                    // 当滚轮远离使用者时ui->textEdit->zoomIn();                // 进行放大}else{                                     // 当滚轮向使用者方向旋转时ui->textEdit->zoomOut();               // 进行缩小}qDebug() << "鼠标滚轮事件";
}

部分测试结果:

CentOS 7 64 位 - VMware Workstation 2024-02-22 14-02-54

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

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

相关文章

ubuntu使用LLVM官方发布的tar.xz来安装Clang编译器

ubuntu系统上的软件相比CentOS更新还是比较快的&#xff0c;但是还是难免有一些软件更新得不那么快&#xff0c;比如LLVM Clang编译器&#xff0c;目前ubuntu 22.04版本最高还只能安装LLVM 15&#xff0c;而LLVM 18 rc版本都出来了。参见https://github.com/llvm/llvm-project/…

服务器系统日志在哪里看

查看服务器系统日志的方法取决于您使用的操作系统和服务器类型。以下是一些常见操作系统的查看系统日志的方法 在Windows操作系统中&#xff0c;可以通过“事件查看器”来查看系统日志。首先&#xff0c;点击“开始”菜单&#xff0c;选择“控制面板”&#xff0c;然后点 击“…

【STM32】Keil RTE使用记录

0 前言 最近因为任务需要&#xff0c;再次开始研究STM32&#xff0c;打算过一遍之前记录的笔记&#xff0c;在创建工程模板时&#xff0c;突然发现一个之前被自己忽略的东西&#xff0c;那就是创建项目时会弹出的Run-Time Environment&#xff0c;抱着好奇的心态去找了一些资料…

防御保护--入侵防御系统IPS

目录 DFI和DPI技术 --- 深度检测技术 入侵防御&#xff08;IPS&#xff09; 签名 入侵防御策略的配置 内容安全&#xff1a;攻击可能只是一个点&#xff0c;防御需要全方面进行 IAE引擎 DFI和DPI技术 --- 深度检测技术 DPI--深度包检测技术--主要针对完整的数据包&#xff0…

冒泡排序法的名字由来,排序步骤是什么,最坏情况下的排序次数如何计算得来的呢?

问题描述&#xff1a;冒泡排序法的名字由来&#xff0c;排序步骤是什么&#xff0c;最坏情况下的排序次数如何计算得来的呢&#xff1f; 问题解答&#xff1a; 冒泡排序法的名字来源于排序过程中较大的元素会像气泡一样逐渐“冒”到序列的顶端&#xff0c;而较小的元素则会逐…

宝玉:Sora 如何改变我们的生活

以下是宝玉老师接受有关Sora采访以及整理脱水的文字稿&#xff0c;非常值得阅读。 很荣幸受王又又邀请&#xff0c;今天和她以及《宇宙探索编辑部》副导演吕启洋&#xff08;Ash&#xff09;一起聊聊了一下当前火爆的话题 Sora&#xff0c;看 Sora 如何改变我们的生活。 我把技…

web前端安全性——XSS跨站脚本攻击

前端Web安全主要涉及保护Web应用程序免受恶意攻击和滥用的过程。攻击者可能会利用Web漏洞来窃取敏感信息、执行未经授权的操作或破坏应用程序。作为前端工程师我们应该了解前端攻击的漏洞有哪些&#xff0c;采用什么方法解决。 跨站脚本攻击&#xff08;XSS&#xff09; 1、概…

Object和Function是函数,函数都有一个prototype属性

Object 和 Function 都是 JavaScript 自带的函数对象 在 JavaScript 中&#xff0c;万物皆对象&#xff0c;你要一个吗&#xff1f;new Object() 啊&#xff01; 当然&#xff0c;就好比同样为人&#xff0c;也区分普通人和天才。 对象也是有分类的&#xff0c;分为 普通对象…

员工离职倾向分析工具

很多公司都担心员工离职&#xff0c;尤其是工龄久的老员工&#xff0c;为什么呢&#xff1f; 很多离职员工带走上家机密&#xff0c;还有的辞职后开公司成为了上家企业的对手公司等等&#xff0c;这类事件非常常见&#xff0c;因此员工离职是一个敏感的话题。 员工离职的原因 …

基于springboot+vue的植物健康系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

C语言作用域2.0

作用域的临时掩盖 如果有多个不同的作用域相互嵌套&#xff0c;那么小范围的作用域会临时 “遮蔽” 大范围的作用域中的同名标识符&#xff0c;被 “遮蔽” 的标识符不会消失&#xff0c;只是临时失去可见性。 示例代码&#xff1a; int a 100;// 函数代码块1 int main(voi…

力扣随笔之两数之和 Ⅱ -输入有序数组(中等167)

思路&#xff1a;在递增数组中找出满足相加之和等于目标数 定义左右两个指针&#xff08;下标&#xff09;从数组两边开始遍历&#xff0c;若左右指针所指数字之和大于目标数&#xff0c;则将右指针自减&#xff0c;若左右指针所指数字之和小于目标数&#xff0c;则左指针自加&…

2.23数据与结构算法学习日记(贪心)

洛谷P1109 学生分组 题目描述 有 n 组学生&#xff0c;给出初始时每组中的学生个数&#xff0c;再给出每组学生人数的上界 R 和下界 L (L≤R)&#xff0c;每次你可以在某组中选出一个学生把他安排到另外一组中&#xff0c;问最少要多少次才可以使 N 组学生的人数都在 [L,R] 中…

大项目中,某个cpp文件读取所在包路径的方法

在一个比较大的C项目中&#xff0c;我们有很多包&#xff0c;每个包都有一个自己的src、include、CMakeLists.txt和其它文件&#xff0c;比如以下文件结构&#xff1a; project- pkg1- datas- data.json- src- xxx1.cpp- include- xxx1.h - CMakeLists.txt- pkg2- src- xxx2.…

为什么vue3内不使用this

在 Vue 3 中&#xff0c;this 的使用受到了限制&#xff0c;主要是因为在 Vue 3 中引入了 Composition API&#xff0c;它提供了一种更灵活、更可组合的方式来组织和管理组件的逻辑。在 Composition API 中&#xff0c;不再使用传统的选项&#xff08;如 data、methods、comput…

前端(vue)数据存储方案

引言 本需求文档旨在明确前端项目中的数据存储需求&#xff0c;包括数据类型、数据结构、数据交互方式等。它定义了前端项目中需要存储和处理的数据&#xff0c;以及对这些数据进行访问和操作的要求。 功能需求 数据存储按数据类型分为 持久存储、内存存储&#xff08;响应式…

AD24-蛇形走线

一、单端蛇形走线 1、公差参数 2、布线-网络等长调节 3、参数说明 ①手工输入绕线的长度 ②参照个网络的长度绕线 ③按照自身设置的规绕线&#xff08;一般选用) 4、调节 5、最后 二、差分蛇形走线 1、布线-差分对网络等长调节 2、如在选中的时候出现问题&#xff0c;按CtrlD…

273.【华为OD机试真题】园区参观路径(动态规划-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-园区参观路径二.解题思路三.题解代码Python题解…

Linux学习方法-框架学习法——Linux应用程序编程框架

配套视频学习链接&#xff1a;https://www.bilibili.com/video/BV1HE411w7by?p4&vd_sourced488bc722b90657aaa06a1e8647eddfc 目录 Linux应用程序编程 Linux应用程序编程 Linux文件I/O(input/output) Linux文件I/O(五种I/O模型) Linux多进程 Linux多线程 网络通信(s…

集合、List、Set、Map、Collections、queue、deque

概述 相同类型的数据进行统一管理操作&#xff0c;使用数据结构、链表结构&#xff0c;二叉树 分类&#xff1a;Collection、Map、Iterator 集合框架 List接口 有序的Collection接口&#xff0c;可以对列表中的每一个元u尿素的插入位置进行精确的控制&#xff0c;用户可以根…