《QT从基础到进阶·十八》QT中的各种鼠标事件QEvent

1、界面标题栏事件:
NonClientAreaMouseButtonPress 标题栏点击事件
NonClientAreaMouseButtonRelease 标题栏释放事件

bool CustomPopDialog::event(QEvent* event)
{
    switch (event->type())
    {
    case QEvent::MouseButtonRelease:
        //Event of mouse releasing window title
    case QEvent::NonClientAreaMouseButtonRelease:
    {
        QMouseEvent* e = static_cast<QMouseEvent*>(event);
        if (e && e->button() == Qt::LeftButton)
        {
            emit dragRelease(e->globalPos());
        }
        m_isPress = false;
        if (m_timer->isActive() == true)
        {
            m_timer->stop();
        }
    }
    break;
    case QEvent::Close:
    {
        // Signal the pop-up window to destroy
        emit PopDialogClose(m_pWidget);
        m_isPress = false;
        if (m_timer->isActive() == true)
        {
            m_timer->stop();
        }
        break;
    }
    case QEvent::NonClientAreaMouseButtonPress:
    {
        QMouseEvent* e = static_cast<QMouseEvent*>(event);
        if (e && e->button() == Qt::LeftButton)
        {
            m_isPress = true;
            if (m_timer->isActive() == false)
            {
                m_timer->start(10);
            }
        }
        break;
    }
    case QEvent::NonClientAreaMouseMove:
    {
        
        QMouseEvent* e = static_cast<QMouseEvent*>(event);
        
        if (m_isPress)
        {
            int a = 0;
        }

        if (e)
        {
            emit mouseGlobalPoint(e->pos());
        }
        break;
    }
    }
    return QDialog::event(event);
}

2、鼠标按下事件
mousePressEvent(QMouseEvent* event)

在这里插入图片描述

#include <QMouseEvent>

void widget::mousePressEvent(QMouseEvent* event)
{
	//鼠标左键按下
	if (event->button() == Qt::LeftButton)
	{
		//do something
	}
	//...
}

3、鼠标移动事件
mouseMoveEvent(QMouseEvent* event):

pos()函数获取鼠标指针在窗口的位置,pos().x(), pos().y()获取坐标
默认是鼠标按下移动才会触发mouseMoveEvent事件,如果不想按下鼠标移动也能触发mouseMoveEvent事件可以在构造中设置鼠标跟踪:

setMouseTracking(true); //设置鼠标跟踪

如果涉及子界面的鼠标移动事件也需要在子界面的构造中加上鼠标跟踪。

setMouseTrack无效问题:
有时候子界面响应鼠标移动父界面不响应或父界面响应子界面不响应,例如:QLabel放在QStackedWidget上,QStackedWidget放在myWidget的centerWidget上,centerWidget自动放在mainWindow上(mianWindow的中心区域),myWidget继承QWidget,这时候需要层层设置:
QLabel->setMouseTrack(true);
QStackedWidget->setMouseTrack(true);
centerWidget->setMouseTrack(true);
myWidget->setMouseTrack(true);
myWidget->parentWidget()->setMouseTrack(true);

4、鼠标移入移出事件
widget中重写鼠标移入移出事件:

void enterEvent(QEvent* event); //鼠标移入界面触发
void leaveEvent(QEvent* event); //鼠标移出界面触发

5、鼠标释放事件
鼠标按下后在松开鼠标触发。
mouseReleaseEvent(QMouseEvent *event):

6、鼠标双击事件
双击鼠标触发
mouseDoubleClickEvent(QMouseEvent *event):
在这里插入图片描述

7、鼠标滚轮事件
event->delta()数值,角度 * 8 = delta()
在这里插入图片描述

//demo
void THM_CT::wheelEvent(QWheelEvent * event)
{
   // …
	m_currentIndex += event->delta() / 500.0;
	r_image=image.scaled(image.width()*currentIndex,image.height()*currentIndex,Qt::IgnoreAspectRatio, Qt::SmoothTransformation); //图片缩放	
}

最后:
如果在QGraphicsView中无法触发鼠标事件,这是因为鼠标事件是被QGraphicsView里面的viewport截取了,在viewport上安装一个事件过滤器,通过事件过滤来截取鼠标事件,实现鼠标事件的透传。
在这里插入图片描述

📢博客主页: 主页
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 梦回阑珊 原创,首发于 CSDN,转载注明出处🙉
📢代码改变世界,你来改变代码!✨

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

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

相关文章

Python爬虫抓取微博数据及热度预测

首先我们需要安装 requests 和 BeautifulSoup 库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install requests pip install beautifulsoup4然后&#xff0c;我们需要导入 requests 和 BeautifulSoup 库&#xff1a; import requests from bs4 import BeautifulSou…

奇异矩阵、非奇异矩阵

对于一个方阵A&#xff1a; 如果A的行列式等于0&#xff0c;称矩阵A为奇异矩阵如果A的行列式不等于0&#xff0c;称A 非奇异矩阵 也就是说&#xff0c;对于方阵A&#xff0c;如果它是满秩的&#xff0c;即它的秩等于矩阵的阶数&#xff0c;就是非奇异矩阵&#xff1b;如果秩小…

【 云原生 | K8S 】kubectl 详解

目录 1 kubectl 2 基本信息查看 2.1 查看 master 节点状态 2.2 查看命名空间 2.3 查看default命名空间的所有资源 2.4 创建命名空间app 2.5 删除命名空间app 2.6 在命名空间kube-public 创建副本控制器&#xff08;deployment&#xff09;来启动Pod&#xff08;nginx-wl…

Intel x86_64 LBR功能

文章目录 前言一、CPUID指令1.1 CPUID功能简介1.2 输入参数01H返回结果1.2.1 ECX返回结果1.2.2 EDX返回结果 1.3 Linux中CPUID指令1.3.1 应用层调用cpid指令1.3.2 linux内核中调用cpuid指令 二、MSR寄存器2.1 MSR 寄存器简介2.2 RDMSR,WRMSR指令介绍2.3 IA32_DEBUGCTL MSR 寄存…

OSG交互:选中场景模型并高亮显示

1、目的 可以在osg视图中选中指定模型实体,并高亮显示。共分为两种,一种鼠标点选,一种框选。 2、鼠标点选 2.1 功能说明 生成两组对象,一组cow对象可以被选中,另一组robot不能被选中;点击cow对象被选中高亮,点击robot被选中不高亮;点击空白处,弹出“select nothing!…

匹配不同应用场景,玩转HyperBDR的两种同步模式!

HyperBDR云容灾是万博智云打造的云原生业务级别容灾工具&#xff0c;实现20云的自动化对接&#xff0c;适配云上、云下、云间多种场景容灾&#xff0c;尤其在容灾上云的场景上&#xff0c;由于大幅节约了容灾过程中的计算资源&#xff0c;以更普惠的方案打造云容灾新场景&#…

React构建组件的方式有哪些?区别?

一、是什么 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念&#xff08;组件&#xff09;来实现开发的模式 在React中&#xff0c;一个类、一个函数都可以视为一个组件 在之前文章中&#xff0c;我们了解到组件所存在的优势&#xff1a; 降低整个系统的耦合度&am…

文件重命名自动化:批量处理让生活更简单

在我们的日常生活和工作中&#xff0c;需要处理大量的文件&#xff0c;无论是文档、图片、音频还是视频。很多时候&#xff0c;为了更好地管理和查找&#xff0c;我们都需要对文件进行重命名。然而&#xff0c;一个一个地重命名文件既耗时又容易出错。幸运的是&#xff0c;随着…

多路转接(中)——poll和epoll

目录 一、poll 1.select的缺点 2.认识poll系统调用 3.poll的优点 二、poll服务器 三、epoll 1.poll的缺点 2.认识epoll的三个接口 3.epoll的原理 四、epoll服务器 一、poll 1.select的缺点 select虽然可以增加IO的效率&#xff0c;但是它有两个问题&#xff1a; &…

高级算法复习

时间代价 主定理 递归树 排序 贪心算法 贪心选择性&#xff08;Greedy-choice property&#xff09;&#xff1a; 通过做出局部最优&#xff08;贪婪&#xff09;选择&#xff0c;可以得出全局最优解——这是贪心算法可行的第一个基本要素&#xff0c;也是贪心算法与动态规划…

使用 Redis 实现生成分布式全局唯一ID(使用SpringBoot环境实现)

目录 一、前言二、如何通过Redis设计一个分布式全局唯一ID生成工具2.1、使用 Redis 计数器实现2.2、使用 Redis Hash结构实现 三、通过代码实现分布式全局唯一ID工具3.1、编写获取工具3.2、测试获取工具 四、总结 一、前言 在很多项目中生成类似订单编号、用户编号等有唯一性数…

创建云端服务器

1.申请云端服务器 每个账户有三个月的免费试用 我的服务器选择是centos7 &#xff0c;别选成win了。 2.创建实例 创建实例的步骤&#xff0c;阿里云有文档 介绍 大致就是 左边点实例 -》 顶部选你申请服务器时的地区-》下面就出现一条实例-》点更多 -》要重置实例密码 -》同一…

Docker安装ewomail

ewomail相关链接 官网官方安装文档gitee 开始安装 快速安装 wget -c https://down.ewomail.com/install-03.sh && sh install-03.sh 域名docker安装 创建docker容器 docker run -idt \-p 25:25 \-p 110:110 \-p 143:143 \-p 465:465 \-p 587:587 \-p 993:993 \-…

【带头学C++】----- 三、指针章 ---- 3.10 函数指针(补充基础知识)

1.函数指针 1.1 函数的返回值类型为指针类型 将函数内部的合法地址通过返回值 返回给函数外部使用 注意:函数不要返回普通局部变量的地址 分析&#xff1a; 在这段代码中&#xff0c;函数getAddr()返回一个指向局部变量data地址&#xff08;作用域是函数内部&#xff09;的指…

DevOps简介

DevOps简介 1、DevOps的起源2、什么是DevOps3、DevOps的发展现状4、DevOps与虚拟化、容器 1、DevOps的起源 上个世纪40年代&#xff0c;世界上第一台计算机诞生。计算机离不开程序&#xff08;Program&#xff09;驱动&#xff0c;而负责编写程序的人&#xff0c;被称为程序员&…

Django ModelSerializer 实现自定义验证详解

随着 Web 开发的日益复杂化&#xff0c;对数据验证的需求也日益增加。Django REST framework 提供了一套强大的、灵活的验证系统&#xff0c;帮助开发者轻松处理各种复杂情况。本文将重点探讨 Django ModelSerializer 中如何实现自定义验证。 1. 简介 Django ModelSerializer…

深度学习 opencv python 实现中国交通标志识别 计算机竞赛_1

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…

2023面试笔记四

1、gc导致的cpu冲高 排查是否为gc导致&#xff0c;看如下两点&#xff1a; gc频率和耗时 内存占用率 &#xff08;1&#xff09;gc频率和耗时有两种手段看&#xff1a; 第一种&#xff1a;根据gc日志的打印时间&#xff0c;可确定每次gc间隔的时间和耗时&#xff1a; 使用…

一个界面现代美观,色彩年轻化的Vue3+SpringBoot3前后端分离中后台管理脚手架

&#x1f4da; 在线文档 | ✨ 提交需求 | &#x1f680; 演示地址&#xff08;账号/密码&#xff1a;admin/admin123&#xff09; 简介 ContiNew Admin &#xff08;Continue New Admin&#xff09;中后台管理框架/脚手架&#xff0c;持续以最新流行技术栈构建&#xff0c;拥…

[git] cherry pick 将某个分支的某次提交应用到当前分支

功能&#xff1a;将某个分支的某次提交应用到当前分支 应用场景&#xff1a; 在合并分支时&#xff0c;是将源分支的所有内容都合并到目标分支上&#xff0c;有的时候我们可能只需要合并源分支的某次或某几次的提交&#xff0c;这个时候我们就需要使用到git的cherry-pick操作…