Qt::WA_NoMousePropagation用法

2023-10-27

在QT中,鼠标事件包含:鼠标按键按下,鼠标按键释放,鼠标双击事件,鼠标移动事件。
分别由下面的event handler(事件处理器,实际上就是一些可override的函数)来处理:

virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
virtual void mouseDoubleClickEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);

鼠标事件属于冒泡事件,鼠标事件会一直随着其父链一直路由下去,直到有其祖先所在的widget接受它,或者有事件过滤器消耗它。

注意:如果鼠标事件被路由到包含Qt:: WA_NoMousePropagation窗口属性(即该属性设置为true)的窗口小部件,该鼠标事件不会进一步沿着父控件链路由。如下代码:

#include "MainWindow.h"
#include<QMouseEvent>
#include <QPainter>
#include <QDebug>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>

MainWindow::MainWindow(QWidget* parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    this->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
    this->setFixedSize(500, 500);

    QWidget* wg1 = new QWidget(this);
    wg1->setFixedSize(300, 300);
    wg1->setStyleSheet("background-color:black;");

    QWidget* wg2 = new QWidget(wg1);
    wg2->setFixedSize(100, 100);
    wg2->setStyleSheet("background-color:red;");

    QHBoxLayout* m_layout = new QHBoxLayout;
    wg2->setLayout(m_layout);
    QPushButton* m_btn1 = new QPushButton(wg2);
    m_layout->addWidget(m_btn1);
    m_btn1->setText("--btn1--");
   
    // 当属性为false时,下面这句可以屏蔽,因为该属性默认就是flase的
    m_btn1->setAttribute(Qt::WA_NoMousePropagation, false);

    QLabel* m_label = new QLabel(wg2);
    m_label->setFixedSize(20, 100);
    m_layout->addWidget(m_label);
    m_label->setStyleSheet("background-color:pink");

// 按钮鼠标跟踪事件要设置为true,否则鼠标在按钮上移动不会激发mouseMoveEvent
    m_btn1->setMouseTracking(true); 
    setMouseTracking(true);
    wg1->setMouseTracking(true);
    wg2->setMouseTracking(true);

}

void MainWindow::mouseMoveEvent(QMouseEvent* event)
{
    QPoint p_ab = event->globalPos();
    QPoint p_re = event->pos();

    QString str;
    str = QString("%1 , %2").arg(p_ab.x()).arg(p_ab.y());
    qInfo() << str;

}

运行结果如下:

可以看到,当按钮的Qt::WA_NoMousePropagation属性设置为false时,鼠标在按钮上的移动事件传递到MainWindow中了。当改为下面代码

 m_btn1->setAttribute(Qt::WA_NoMousePropagation, true);

则MainWindow无法收到鼠标在按钮上的移动事件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt::WA_NoMousePropagation用法 的相关文章

随机推荐

  • DB2时间戳查看

    1 打开日志 确定错误是那个数据库操作造成 2 查看bnd文件的时间戳信息 db2bfd b Card bnd grep Timestamp 显示时间戳 Timestamp tA5MPfMZ 2009 12 31 15 12 56 45 3
  • linux服务器下手动删除memcache中的key对应的value

    假设服务器ip是 10 0 0 1 端口是 1234 首先连上服务器 telnet 10 0 0 1 1234 查看某个key对应的值 假设key的名称为 type get type 获取值 delete type 删除
  • Anaconda下pip离线安装Pytorch(亲测可用)

    win10 Anaconda3 python3 7 CUDA10 进入pytorch官网https pytorch org 根据自己情况选择安装 注意 我并没有在Anaconda Prompt下直接输入Run this Comman的内容
  • 2023年十大最佳自动化测试工具

    Best Automation Testing Tools for 2023 对更快交付高质量软件 或 快速质量 的需求要求组织以敏捷 持续集成 CI 和DevOps方法论来寻找解决方案 测试自动化是这些方面的重要组成部分 最新的 2018
  • ContentProvider与ContentResolver

    1 理解ContentProvider与ContentResolver 看下面这个图就行了 2 ContentProvider可以直接理解为一个public的servlet类 里面 封装了一些public 的函数 这个函数可以操作数据库 文
  • C++11 并发指南三(Lock 详解)

    C 11 并发指南三 Lock 详解 文章目录 C 11 并发指南三 Lock 详解 std lock guard 介绍 std lock guard 构造函数 std unique lock 介绍 std unique lock 构造函数
  • 深入理解Java虚拟机(四)Eden、Survivor、老年代、GC日志

    1 年轻代 1 1 Eden区和Survivor区 新生代GC Minor GC 指发生在新生代的垃圾收集动作 Minor GC非常频繁 新生代采用复制算法 一般回收速度也比较快 因为采用复制算法 所以年轻代分为三部分 1个Eden区和2个
  • java string default values_@RequestParam使用defaultValue属性设置默认值的操作

    RequestParam使用defaultValue属性设置默认值 注意设置必须是string类型的 框架自己会做转换 RequestParam value page required false defaultValue 1 Intege
  • Window窗体属性的基础简述

    Window窗体属性 1 窗口的外观 WPF中默认窗口框架的外观 主要取决于Icon Title WindowStyle ResizeMode等属 性 Icon 指定窗口的图标 Title 指定窗口的标题 WindowStyle指定窗口样式
  • jetson tx2 上部署TensorRT模型推理

    参考 https arleyzhang github io articles 7f4b25ce 1 Jetson tx2 是什么 Jetson tx2简而言之就是AI计算终端 采用 NVIDIA Pascal 构架 外形小巧 节能高效 非常
  • [Matlab]巴特沃夫滤波器设计:低通、高通、带通和带阻

    巴特沃斯滤波器的特点 1 通频带内的频率响应曲线最大限度平坦 没有起伏 而在阻频带则逐渐下降为零 2 在振幅的对数对角频率的波特图上 从某一边界角频率开始 振幅随着角频率的增加而逐步减少 趋向负无穷大 测试代码 ButterWorthFil
  • 如何把图纸转换为t3格式_怎么把图纸转换成t3格式

    cad转化成t3格式 1 打开天正 cad 3 找到图纸保存的位置 点击点开 5 选择输出类型 输入 3 8 2020 05 27 42人浏览 在CAD看图中如何将图纸转成T3格式 浩辰 CAD 看图王官方页面 http yun gstar
  • git命令基本使用(拉取,上传)

    项目从git上通过SSH拉取或上传 1 初始化文件 git init 2 绑定账号的用户名 git config global user name shopping lby 3 绑定账号的邮箱 git config global user
  • 一篇就让你了解进程的虚拟地址与物理地址是如何进行映射的

    这篇文章可以让你了解进程的虚拟地址是如何映射物理地址的 在刚开始接触虚拟地址的概念时 真的是一头雾水 不知道它到底是个什么东西 一直有这个疑惑 为什么要用虚拟地址 虚拟地址的作用是什么 经过这么多年做过的项目 积攒经验后 我可以略知一些虚拟
  • 矩阵乘法

    题目描述 计算两个矩阵的乘法 n m阶的矩阵A乘以m k阶的矩阵B得到的矩阵C 是n k阶的 且C i j A i 0 B 0 j A i 1 B 1 j A i m 1 B m 1 j 输入 第一行为n m k 表示A矩阵是n行m列 B矩
  • 愿每一个人的创造力都能被激发:剪映Mac版来了!

    在移动端上线18个月后 剪映有了PC版 11月27日 视频创作工具剪映正式推出Mac专业版 Windows版计划于明年2月上线 去年秋天 剪映的移动端上线3个月即登顶App Store中国区免费榜 本着打造简单好用的产品 降低视频创作门槛的
  • 攻防世界web进阶区--php_rce write up

    打开靶机 这道题没有什么难点 重点在于RCE的认识和thinkphp的漏洞 那RCE是什么嘞 RCE 远程代码执行漏洞 远程命令 代码执行漏洞 简称RCE漏洞 可以让攻击者直接向后台服务器远程注入操作系统命令或者代码 从而控制后台系统 RC
  • 正交矩阵

    正交性 是从几何学中借来的术语 如果两条直线相交成直角 它们就是正交的 比如图中的坐标轴 用向量术语说 这两条直线互不依赖 沿着某一条直线移动 你投影到另一条直线上的位置不变 在计算技术中 该术语用于表示某种不相依赖性或是解耦性 如果两个或
  • 设计模式:结构型模式-----适配器模式

    1 概述 将某个类的接口转换成客户端期望的另一个接口表示 目的是消除由于接口不匹配所造成的兼容性问题 示例 生活中的适配器 即充电器 将220v的交流电转换为手机可以接受的直流电 2 分类 a 类的适配器模式 当希望一个类转换成满足另一个新
  • Qt::WA_NoMousePropagation用法

    在QT中 鼠标事件包含 鼠标按键按下 鼠标按键释放 鼠标双击事件 鼠标移动事件 分别由下面的event handler 事件处理器 实际上就是一些可override的函数 来处理 virtual void mousePressEvent Q