在上一篇文章用到了这两个函数,在这里做一下分析。
event->button() : 返回产生事件的按钮
event->buttons: 返回产生事件的按钮状态,函数返回当前按下的所有按钮,按钮状态可以是
Qt::LeftButton,Qt::RightButton,Qt::MidButton或运算组合
例如:
鼠标左键已经处在按下的状态,
此时如果移动鼠标,会产生鼠标的move事件,button()返回Qt::NoButton,buttons()返回LeftButton。
再按下鼠标右键,会触发鼠标的press事件,button返回RightButton,buttons返回LeftButton | RightButton
再移动鼠标,会发生move事件,button返回Qt::NoButton,buttons返回LeftButton | RightButton
再松开左键,会发生Release事件,button返回LeftButton,buttons返回RightButton
简而言之,button返回“发生了此事件的按钮”,buttons返回"发生事件时还处于按下状态的按钮"
常用的判断条件(Event->buttons() && Qt::LeftButton)
如果鼠标左键处于按下状态,则结果为真,如果不考虑左右键都处于按下状态,则 与event->buttons() == Qt::LeftButton在结果上是相同的。
Event->buttons()的返回是 Qt::MouseButton
返回值为以下几种类型:
Qt::NoButton
0x00000000
Qt::LeftButton
0x00000001
Qt::RightButton
0x00000002
Qt::MidButton
0x00000004
当左键按下时,返回值是1
右键 2
中键 4
左+右 3
左+中 5
右+中 6
左右中 7
(Event->buttons() & Qt::LeftButton) //&为位运算符,按位进行与运算。
的意思是判断左键是否被按下,只有左键按下了,其返回值就是1(true)