鼠标事件和滚轮事件

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.hqwc.cn/news/486603.html

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

相关文章

使用Streamlit构建纯LLM Chatbot WebUI傻瓜教程

文章目录 使用Streamlit构建纯LLM Chatbot WebUI傻瓜教程开发环境hello Streatelit显示DataFrame数据显示地图WebUI左右布局设置st.sidebar左侧布局st.columns右侧布局 大语言模型LLM Chatbot WebUI设置Chatbot页面布局showdataframe()显示dataframeshowLineChart()显示折线图s…

面试百问:Redis常见的故障以及发生场景

作为一个测试同学&#xff0c;被测系统架构中有使用到redis吗&#xff1f;对redis常见的故障有了解吗&#xff1f;又是如何进行测试的呢&#xff1f; 针对常见的redis面试问题&#xff0c;怎样才算一个高质量的回答呢&#xff0c;回答思路一般包括 问题的类型是什么&#xff…

Jmeter基础(2) 目录介绍

目录 Jmeter目录介绍bin目录docsextrasliblicensesprintable_docs Jmeter目录介绍 在学习Jmeter之前&#xff0c;需要先对工具的目录有些了解&#xff0c;也会方便后续的学习 bin目录 examplesCSV目录中有CSV样例jmeter.batwindow 启动文件jmeter.shMac/linux的启动文件jmete…

费舍尔FISHER金属探测器探测仪维修F70

美国FISHER LABS费舍尔地下金属探测器&#xff0c;金属探测仪等维修&#xff08;考古探金银铜探宝等仪器&#xff09;。 费舍尔F70视听目标ID金属探测器&#xff0c;Fisher 金属探测器公司成立于1931年&#xff0c;在实验条件很艰苦的情况下&#xff0c;研发出了地下金属探测器…

Java零基础 - 三元运算符

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

【k8s核心概念与专业术语】

k8s架构 1、服务的分类 服务分类按如下图根据数据服务支撑&#xff0c;分为无状态和有状态 无状态引用如下所示&#xff0c;如果一个nginx服务&#xff0c;删除后重新部署有可以访问&#xff0c;这个属于无状态&#xff0c;不涉及到数据存储。 有状态服务&#xff0c;如redis&a…

基于SSH打通隧道实现异地组网

前言 最近有异地组网的需求&#xff0c;我目前的是用蒲公英X1盒子来进行组网&#xff0c;但是蒲公英X1非会员账号有设备限制3个&#xff08;这个是硬伤&#xff09;&#xff0c;虽然说可以打通P2P但是在复杂的网络环境下概率不是特别高 所以研究下SSH异地组网的方式&#xff…

PBM模型学习

本专栏着重讲解PBM学习所得&#xff0c;学习笔记、心得&#xff0c;并附有视频素材资料&#xff0c;视频详细目录如下&#xff1a; PBM相关参数解释1 PBM相关参数解释2 PBM相关案例实践1 PBM相关案例实践2 PBM相关案例实践2 PBM相关案例实践3 PBM多相流中次相界面设置1 PBM多相…

【无标题】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘

项目场景&#xff1a; 做单链表反转题目&#xff0c;报错&#xff1a;member access within null pointer of type ‘struct ListNode’ 题目链接:LINK 问题描述 我明明在初始化指针时候&#xff0c;已经处理了n2->next情况却依然报错 这个报错提示含义是&#xff1a;大概就…

Jenkins的使用GIT(4)

Jenkins的使用GIT 20211002 我们使用 Jenkins 集成外部 Git 仓库&#xff0c;实现对真实代码的拉取和构建。在这里&#xff0c;我们选用 Coding/Github/Gitee 等都可以作为我们的代码源 1 生成公钥私钥 首先&#xff0c;我们先来配置公钥和私钥。这是 Jenkins 访问 Git 私有库…

助力探索社交出海最短变现路径,融云 1V1 音视频「限时免费」

在社交赛道&#xff0c;1V1 业务是最好的切入点。 对于初创公司来说&#xff0c;1V1 业务的技术成本和运营成本相对可控&#xff0c;并且具备与秀场直播等业务融合拓展的巨大空间。未来&#xff0c;相信 1V1 业务会吸引更多开发者投身其中。 一位社交出海经验丰富的从业者曾在…