Qt扫盲

您所在的位置:网站首页 鼠标移动事件是什么 Qt扫盲

Qt扫盲

2023-07-11 05:28| 来源: 网络整理| 查看: 265

QMouseEvent 鼠标事件理论 一、概述二、鼠标事件的传递三、组合修饰符四、鼠标坐标位置五、使用方式

一、概述

当在QWidget窗口内的鼠标按钮被按下或释放,或者鼠标光标被移动时,就会发生鼠标事件。

鼠标按下释放没有什么特殊的,但是鼠标移动事件比较特殊,只有当鼠标按钮被按下时,鼠标移动事件才会发生,除非使用 QWidget::setMouseTracking()函数去启用了鼠标跟踪。

QWidget::setMouseTracking(bool enable) 如果禁用了鼠标跟踪(默认),则只有在鼠标移动过程中至少按下一个鼠标按钮时,Widget才会接收鼠标移动事件。 如果启用了鼠标跟踪,即使没有按下按钮,widget也会接收鼠标移动事件。 二、鼠标事件的传递

当widget内的鼠标按键被按下时,Qt会自动抓取鼠标;Widget将继续接收鼠标事件,直到释放最后一个鼠标按钮。 鼠标事件包含一个特殊的accept标志,表示接收者是否想要这个事件。如果widget没有处理鼠标事件,就应该调用ignore()。这个就操作就可以让鼠标事件在父Widget链中向上传播,直到Widget使用accept()接受它,或者事件过滤器使用它。

注意:如果一个鼠标事件被传播到一个设置了Qt:: wa_nomoussepropagation的Widget上,那么这个鼠标事件将不会在父Widget链上进一步传播。

三、组合修饰符

键盘修饰键的状态可以通过调用从QInputEvent继承的modifiers()函数来找到。

就像 在鼠标移动的时候我同时按住一些 shift 或着 alt之类的。这个可以是同时被按下多个键的哈,

标识名值含义Qt::NoModifier0x00000000没修饰键按下Qt::ShiftModifier0x02000000Shift 按下Qt::ControlModifier0x04000000Ctrl 按下Qt::AltModifier0x08000000Alt 按下Qt::MetaModifier0x10000000Meta 按下 四、鼠标坐标位置

函数pos()、x()和y()给出了鼠标相对于接收鼠标事件的Widget的位置。

如果在鼠标事件发生后移动了Widget,使用globalPos()返回的全局位置来避免抖动。这个globalPos() 其实是鼠标在整个屏幕平面的位置,而pos()是指这个鼠标在这个窗口的位置。 在这里插入图片描述

五、使用方式

函数QWidget::setEnabled()可用于启用或禁用Widget的鼠标和键盘事件。

要使用这个事件函数的时候,就需要重新实现QWidget事件处理程序,即继承QWidget窗口去重写QWidget::mousePressEvent()、QWidget::mouseReleaseEvent()、QWidget::mouseDoubleClickEvent()和QWidget::mouseMoveEvent(),在自己的Widget中接收鼠标事件即可。当然也可以不去继承,直接使用事件过滤器也可以用的哈。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3