Qt扫盲 |
您所在的位置:网站首页 › 鼠标移动事件是什么 › Qt扫盲 |
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 |