Qt 窗口悬停事件和鼠标跟踪

embedded/2024/10/21 19:11:41/

悬停事件

//这行代码用于启用窗口部件(widget)的悬停事件跟踪功能。
setAttribute(Qt::WA_Hover, true); 
作用
  • setAttribute(Qt::WA_Hover, true); 这行代码的作用是设置窗口部件的一个属性标志,使其能够接收悬停事件(hover events)。
  • 默认情况下,Qt中的窗口部件不会接收悬停事件,除非显式地启用这一功能。
属性标志 Qt::WA_Hover
  • Qt::WA_Hover 是一个属性标志(attribute flag),用于指示窗口部件是否应该接收悬停事件。
  • 当这个标志被设置为 true 时,窗口部件将开始接收悬停事件,如 enterEvent()leaveEvent(), 和 hoverMoveEvent()
注意
  • 仅仅设置 Qt::WA_Hover 为 true 并不足以确保窗口部件能够接收所有悬停事件。通常,还需要确保窗口部件已经安装了事件过滤器,或者重新实现了相关的事件处理函数。
  • 要接收 hoverMoveEvent()(即鼠标在窗口部件上移动时的悬停事件),除了设置 Qt::WA_Hover 为 true 外,还需要确保窗口部件的 mouseTracking 属性也被设置为 true。这可以通过调用 setMouseTracking(true); 来实现。

鼠标跟踪

        setMouseTracking 是 Qt 框架中 QWidget 类的一个成员函数,用于控制小部件(widget)是否接收鼠标移动事件,即使在没有按下鼠标按钮的情况下。这个函数对于需要实时跟踪鼠标位置的应用程序特别有用,比如绘图应用、游戏等界面。 

//原型:
void QWidget::setMouseTracking(bool enable);

参数:一个布尔值,用于指定是否启用鼠标跟踪

  • true:启用鼠标跟踪,使得小部件能够接收鼠标移动事件(mouseMoveEvent),无论鼠标按钮是否被按下。
  • false:禁用鼠标跟踪(默认值),小部件仅在鼠标按钮被按下时接收鼠标移动事件。 
成员函数详解
  • 作用范围setMouseTracking 仅影响当前调用它的小部件及其子小部件(如果子小部件没有单独设置鼠标跟踪的话)。但是,请注意,如果子小部件有自己的鼠标事件处理逻辑,并且它们调用了自己的 setMouseTracking,那么它们的行为将独立于父小部件。
  • 事件类型setMouseTracking 仅影响鼠标移动事件(mouseMoveEvent)。其他类型的鼠标事件(如鼠标按下、释放、双击、滚轮等)不受此函数的影响。这些事件将按照 Qt 的默认事件分发机制进行处理。
  • 性能考虑:启用鼠标跟踪会增加事件处理的开销,因为系统需要不断地发送鼠标移动事件到小部件。在包含大量小部件的大型应用程序中,这可能会导致性能问题。因此,建议在确实需要跟踪鼠标移动时才启用它。
// 假设有一个QWidget子类实例名为myWidget  
myWidget->setAttribute(Qt::WA_Hover, true);  
myWidget->setMouseTracking(true); // 确保能够接收hoverMoveEvent()  // 重新实现hoverMoveEvent()以处理悬停移动事件  
protected:  void hoverMoveEvent(QHoverEvent *event) override {  // 处理悬停移动事件的代码  qDebug() << "Hover moved to:" << event->pos();  }

http://www.ppmy.cn/embedded/129340.html

相关文章

git clone报错fatal: pack has bad object at offset 186137397: inflate returned 1

逐步拷贝 https://stackoverflow.com/questions/27653116/git-fatal-pack-has-bad-object-at-offset-x-inflate-returned-5 https://www.cnblogs.com/Lenbrother/p/17726195.html https://cloud.tencent.com/developer/ask/sof/107092182 git clone --depth 1 <repository…

firewalld 防火墙常用命令

开启 firewalld systemctl start firewalld查看 firewalld 状态 systemctl status firewalldsystemctl status firewalld开启&#xff1a; 开放端口&#xff08;示例开放 80 端口&#xff09; firewall-cmd --zonepublic --add-port80/tcpfirewall-cmd --zonepublic --add…

嵌入式技术:熟悉开发环境及GPIO编程(实验报告)

1.实验目的 &#xff08;1&#xff09;理解GPIO常用函数功能 &#xff08;2&#xff09;掌握GPIO构件的输出测试方法 2.实验原理&#xff08;简述GPIO工作原理&#xff0c;5分&#xff09; GPIO&#xff0c;即通用输入输出端口&#xff0c;是单片机等微控制器上的一种基本接…

[论文笔记]RA-DIT: RETRIEVAL-AUGMENTED DUAL INSTRUCTION TUNING

引言 今天带来一篇RAG微调的论文笔记——RA-DIT: RETRIEVAL-AUGMENTED DUAL INSTRUCTION TUNING。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们"。 我们引入了检索增强双指令微调(Retrieval-Agumented Dual Instructio…

CTFHUB技能树之SQL——时间盲注

开启靶场&#xff0c;打开链接&#xff1a; 说明这关对所有信息都做了统一输出&#xff0c;换成延时注入试试 输入&#xff1a; 1 and sleep(15) &#xff08;这里不知道为什么加上--倒是会影响sleep()函数的触发&#xff0c;从而没有延时感&#xff09; 可以观察到有明显的延…

中级注册安全工程师《安全生产法律法规》真题及详解

2022年中级注册安全工程师《安全生产法律法规》真题及详解 一、单项选择题 &#xff08;共70题&#xff0c;每题1分。每题的备选项中&#xff0c;只有1个最符合题意&#xff09; 1. 法律的制定主体不同&#xff0c;其法律地位和法律效力也不同。关于法律地位和效力的说法&…

透过 Diffusion Transformer 探索生成式模型的技术演进

SiT: Exploring Flow and Diffusion-based Generative Models with Scalable Interpolant Transformers 一、前言 扩散模型为代表的生成式模型&#xff0c;以其深刻的还原论的哲学原理作为内在基础&#xff0c;辅以机器学习领域各类优秀的模型设计&#xff0c;在各个学术和应…

Flink系统架构和应用部署方式

目录 概述 Flink集群架构组件 Client JobManager TaskManagers 算子、Task和Subtask三者关系 概念 算子和Task的关系 Task和SubTask的关系 算子和SubTask的关系 样例 Task Slots和资源的关系 Flink应用程序部署 Flink Session 集群 Flink Job 集群 Flink Appli…