【QT】鼠标事件<QMouseEvent>

事件(鼠标事件)

功能单一的事件,鼠标进来是一个事件,鼠标出去是另外一个事件。

QT提供了很多的事件函数,我们通过重写这些事件函数就可以实现我们想要的效果。

  • 事件函数都是虚函数

写一个子类,继承QLabel,那我们就可以重写事件。

在这里插入图片描述

使用label标签,使得label继承mylabel

QLabel

在这里插入图片描述


//发生改变
virtual void 
changeEvent(QEvent *ev) override
//上下文菜单:在计算机图形用户界面中,通过鼠标右键点击或其他特定操作触发的一个弹出式菜单,其中包含了针对当前选定对象或区域的相关操作选项
virtual void 
contextMenuEvent(QContextMenuEvent *ev) override
//事件
virtual bool 
event(QEvent *e) override
//焦点进去
virtual void 
focusInEvent(QFocusEvent *ev) override
virtual bool 
focusNextPrevChild(bool next) override
//焦点移出
virtual void 
focusOutEvent(QFocusEvent *ev) override

//键盘按键按下事件
virtual void 
keyPressEvent(QKeyEvent *ev) override
//鼠标移动事件
virtual void 
mouseMoveEvent(QMouseEvent *ev) override
virtual void 
mousePressEvent(QMouseEvent *ev) override
virtual void 
mouseReleaseEvent(QMouseEvent *ev) override
//刷新窗口的事件
virtual void 
paintEvent(QPaintEvent *) override

由于QLabel继承自QWidget。所以QWidget中还有更多。


//鼠标移入
virtual void enterEvent(QEvent *event)
//鼠标移出
virtual void leaveEvent(QEvent *event)
//鼠标点两下
virtual void mouseDoubleClickEvent(QMouseEvent *event)
    //定时器
virtual  void timerEvent(QTimerEvent *);

上面的函数都是回调函数,因此只需要对他们函数的功能进行重写就好了,在触发条件时,它们会自动执行。

在这里插入图片描述

鼠标移到白云会变为猪头

protected:
    //鼠标进入
    void enterEvent(QEvent *);  //都是回调函数
    //鼠标离开
    void leaveEvent(QEvent *);

//鼠标进入 (进入边界的一瞬间触发)
void mylabel:: enterEvent(QEvent *) //都是回调函数
{
    setText("猪头");
}
//鼠标离开  (离开边界的一瞬间触发)
void mylabel:: leaveEvent(QEvent *)
{
    setText("白云");
}

QString(帮助手册)多看看

字符串可以做是否相等的判断,拼接,等等


bool operator!=(const QString &s1, const QString &s2)
bool operator!=(const char *s1, const QString &s2)
const QString operator+(const QString &s1, const QString &s2)
const QString operator+(const QString &s1, const char *s2)
.....
.....

整数转化为QString字符串类型


QString 
number(long n, int base = 10)
QString 
number(uint n, int base = 10)
QString 
number(int n, int base = 10)
QString 
number(ulong n, int base = 10)
QString 
number(qlonglong n, int base = 10)
QString 
number(qulonglong n, int base = 10)
QString 
number(double n, char format = 'g', int precision = 6)

字符串拼接

字符串拼接
// 1. str.sprintf("%d,%s",123,"aaa");
// 2.   QString str = QString("%1 %2 %3").arg("This").arg("a").arg("love");
   setText(str);             //占位符

鼠标事件

#include <QMouseEvent>

获取坐标

 QString str = QString("Presscoord:(%1,%2),%3").arg(ev->x()).arg(ev->y()));
   setText(str);
protect:   
//鼠标按下
    void mousePressEvent(QMouseEvent *ev);
    //鼠标释放
    void mouseReleaseEvent(QMouseEvent *ev);
    //鼠标移动
    void mouseMoveEvent(QMouseEvent *ev);
  • 某一个瞬间的状态用button判断
#include <QMouseEvent>

//鼠标按下
void mylabel::mousePressEvent(QMouseEvent *ev)
{
    QString btn;
    if(ev->button() == Qt::LeftButton)
    {
        btn = "leftbutton";
    }
    else if(ev->button() == Qt::RightButton)
    {
     btn = "rightbutton";
    }
    else  if(ev->button() == Qt::MidButton)
    {
        btn = "midButton";
    }

   QString str = QString("Presscoord:(%1,%2),%3").arg(ev->x()).arg(ev->y()).arg(btn);
   setText(str);
}
//鼠标释放
void mylabel::mouseReleaseEvent(QMouseEvent *ev)
{
    QString btn;
    if(ev->button() == Qt::LeftButton)
    {
        btn = "leftbutton";
    }
    else if(ev->button() == Qt::RightButton)
    {
     btn = "rightbutton";
    }
    else  if(ev->button() == Qt::MidButton)
    {
        btn = "midButton";
    }

   QString str = QString("Releasecoord:(%1,%2),%3").arg(ev->x()).arg(ev->y()).arg(btn);
   setText(str);
}

鼠标移动:必须使用buttons才能判断鼠标的左右中键

  • 一个持续的状态用buttons

结合&操作符号

Qt::MouseButtons QMouseEvent::buttons(

返回事件生成时的按钮状态。按钮状态是使用OR(或)操作符的Qt::LeftButton, Qt::RightButton, Qt::MidButton的组合。

  • 对于鼠标移动事件,这是所有按下的按钮。
  • 对于鼠标按下和双击事件,这包括引起该事件的按钮。
  • 对于鼠标释放事件,这将排除引起该事件的按钮。
//鼠标移动(按住)
void mylabel:: mouseMoveEvent(QMouseEvent *ev)
{
    QString btn;
    if(ev->buttons() == Qt::LeftButton)
    {
        btn = "leftbutton";
    }
    else if(ev->buttons() == Qt::RightButton)
    {
     btn = "rightbutton";
    }
    else  if(ev->buttons() == Qt::MidButton)
    {
        btn = "midButton";
    }

   QString str = QString("MOVEcoord:(%1,%2),%3").arg(ev->x()).arg(ev->y()).arg(btn);
   setText(str);
}

QWidget 默认不追踪鼠标事件

想让它追踪需要设置窗口追踪鼠标键

this->setMouseTracking(true);

判断鼠标同时按下

if(ev->buttons() &(Qt::LeftButton|Qt::RightButton)
{                              01 |  02
                                03 -->03
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 文件基础科普与文件打开技术详解【第117篇—文件打开技术】

Python 文件基础科普与文件打开技术详解 在Python编程中&#xff0c;文件操作是一项基础而重要的任务。无论是读取数据、写入文件还是进行其他文件处理操作&#xff0c;都需要对文件基础知识有一定的了解。在本文中&#xff0c;我们将首先介绍Python文件的基础概念&#xff0c…

Unity性能优化篇(九) 模型优化之LOD技术概述以及操作方法

LOD模型优化技术概述: 1.LOD技术可以根据摄像头远近来显示不同精度的模型(例如吃鸡游戏 随着跳伞高度 来显示下面树木以及建筑的模型精度) LOD模型优化技术操作方法: 可使用Unity自带的LOD Group组件&#xff0c;并根据项目的情况来调整该组件的属性。Untiy资源商店也有一些其…

机器学习——线性回归

机器学习——线性回归 文章目录 机器学习——线性回归一、什么是线性回归二、一元线性回归方程三、损失函数四、代码实现五、运用说明 一、什么是线性回归 线性回归是一种用来建立自变量和因变量之间线性关系的统计分析方法&#xff0c;也是机器学习中最常见、最容易理解的一个…

Flyway 9.22.3 + springboot3 + MySQL8.0+,简单使用

文章目录 flyway的依赖配置ieda 启动&#xff01;&#xff01;&#xff01; 关于这篇文章主要是自己在使用flyway时遇到的一些问题以及最终的解决方法 当然包括所有的配置&#xff0c;主要目的是记录一下防止下次使用的时候忘记 flyway的依赖 这里 springboot 3 具体版本不再描…

力扣经典 4. 寻找两个正序数组的中位数(多种语言解)

给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (mn)) 。 目录 题目描述 知识点 解题思路 完整代码 Python Java C 题目描述 给定两个大小分别为 m 和…

Kakarot:当今以太坊的未来

1. 引言 前序博客&#xff1a; Kakarot&#xff1a;部署在Starknet上的ZK-EVM type 3 随着 Kakarot zkEVM 即将发布测试网&#xff0c;想重申下 Kakarot zkEVM 的愿景为&#xff1a; 为什么在rollup空间中还需要另一个 zkEVM&#xff1f; 开源代码见&#xff1a; https:/…

Python与FPGA——局部二值化

文章目录 前言一、局部二值化二、Python局部二值化三、FPGA局部二值化总结 前言 局部二值化较全局二值化难&#xff0c;我们将在此实现Python与FPGA的局部二值化处理。 一、局部二值化 局部二值化就是使用一个窗口&#xff0c;在图像上进行扫描&#xff0c;每扫出9个像素求平均…

Android耗电分析之Battery Historian工具使用

Battery-Historian是谷歌推出的一款专门分析Bugreport的工具&#xff0c;是谷歌在2015年I/O大会上推出的一款检测运行在android5.0(Lollipop)及以后版本的设备上电池的相关信息和事件的工具&#xff0c;是一款对于分析手机状态&#xff0c;历史运行情况很好的可视化分析工具。 …

基于单片机的电子秤设计

目 录 摘 要 I Abstract II 引 言 1 1 系统总体设计方案 4 1.1 设计目标与要求 5 1.2 方案论证与选择 6 2 硬件电路设计 7 2.1 单片机型号选择 7 2.2 显示模块电路设计 8 2.3 传感器模块电路设计 9 2.4 按键模块电路设计 11 2.5 报警模块电路设计 12 2.6 模数转换电路设计 12 …

Java | 一维数组的声明与使用

一维数组的声明 Java中声明数组的方法&#xff1a; <变量类型>[] <变量名>;示例&#xff1a; int[] a;上述代码中a是一个数组&#xff0c;可以保存int类型的值。 注意方括号在变量类型与名称之间。 声明数组后&#xff0c;必须为数组分配内存。内存将定义数组可…

C switch 语句

一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case&#xff0c;且被测试的变量会对每个 switch case 进行检查。 语法 C 语言中 switch 语句的语法&#xff1a; switch(expression){case constant-expression :statement(s);break; /* 可选的 */ca…

【CSP试题回顾】201703-1-分蛋糕

CSP-201703-1-分蛋糕 解题代码 #include <iostream> using namespace std;int n, k, sumCake, cake, friendNum;int main() {cin >> n >> k;for (int i 0; i < n; i){cin >> cake;sumCake cake;if (sumCake > k || i n - 1) {friendNum;sum…

【C++庖丁解牛】模版初阶

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1. 泛型编程2. 函数模…

BurpSuite2024.2.1

1.更新介绍 此版本引入了特定的API 扫描功能&#xff0c;并将 Bambdas 合并到 Logger 捕获过滤器中。我们还改进了 DOM Invader 和 Burp Suite 导航记录器的功能&#xff0c;并进行了许多其他改进和错误修复。 API扫描 我们引入了特定的 API 扫描功能。您现在可以上传 OpenAP…

DR模式下LVS负载均衡聚集部署实验

1、实验准备 DR 服务器&#xff1a;192.168.80.9Web 服务器1&#xff1a;192.168.80.11 Web 服务器2&#xff1a;192.168.80.12 nfs 服务器&#xff1a; 192.168.80.10 客户端&#xff1a;192.168.80.100 vip&#xff1a;192.168.80.188 2、配置负载调度器&#xff08;ens33&am…

ICVQUANTUMCHINA报告:《2024全球量子精密测量产业发展展望》

3月4日&#xff0c;《2024量子精密测量产业发展展望》的中文版报告通过光子盒官方平台发布&#xff0c;英文版报告通过ICV官方平台发布。 中文版报告获取地址&#xff1a;量子精密测量-QuantumChina 英文版获取地址&#xff1a;https://www.icvtank.com/newsinfo/899889.html …

DevExpress报表-->更换数据库连接

今天遇到了一个问题&#xff0c;因公司更换IP地址&#xff0c;原先连接报表数据库的IP地址也因此更改。但是&#xff0c;我不知道如何直接修改连接报表的数据。为了解决这个问题&#xff0c;我决定给大家演示一下具体的操作步骤。 换句话说: 将DevExpress报表直接从一个电脑的…

【翻译】零信任架构准则(五)Don‘t trust any network

将监控重点放在用户&#xff0c;设备和服务上 全面监控必不可少&#xff0c;因为设备和服务更容易受到网络攻击。在零信任架构中&#xff0c;随着设备&#xff0c;服务和用户行为的持续评估&#xff0c;我们的监控策略很可能发生改变。我们应该持续进行监控&#xff0c;并将用…

AMDGPU KFD Test 编译使用

ROCT-Thunk-Interface是一个用于在ROCm软件堆栈中提供设备无关性的层。它是ROCm的一部分&#xff0c;允许不同的硬件平台&#xff08;如AMD GPU和Intel CPU&#xff09;使用相同的API进行计算。 要安装ROCT-Thunk-Interface&#xff0c;首先需要创建一个新的目录&#xff0c;并…

Android视角看鸿蒙第三课(module.json中的各字段含义之nametype)

Android视角看鸿蒙第三课(module.json中的各字段含义) 前言 上篇文章我们试图找到鸿蒙app的程序入口&#xff0c;确定了在鸿蒙工程中,由AppScope下的app.json5负责应用程序的图标及名称,由entry->src->main-module.json5负责桌面图标及名称的展示。 AppScope下的app.js…