最近在调试QT程序时用到了buttons()和button()两个函数,顺便整理一下
Qt中buttons()和button()的区别,官方解析如下:
Qt::MouseButton QMouseEvent::button() const
返回产生事件的按钮
Qt::MouseButton QMouseEvent::buttons() const
返回产生事件的按钮状态,函数返回当前按下的所有按钮,按钮状态可以是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)