Qt鼠标按钮

时间:2014-08-14 14:34:17

标签: c++ qt

我使用Qt已经有一段时间了,我正在做的一些事情正在发挥作用,但我不明白为什么,就像这样:

(event->buttons() & Qt::MiddleButton)

这会在按下MiddleButton时返回true,但我的问题是语法,Qt说Qt :: MiddleButton的值为4,因此布尔值总是返回true,这意味着表达式相当于:(event->buttons()) ......那也不符合逻辑......有人可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

来自Qt docs

Qt::LeftButton      0x00000001 ---> 00000001b
Qt::RightButton     0x00000002 ---> 00000010b
Qt::MiddleButton    0x00000004 ---> 00000100b

最右边的列是二进制表示! 所以,

Left+Right  --> buttons(): 3
Left+Middle --> buttons(): 5
.......

然后(buttons() & Qt::MiddleButton)测试是否设置了与MiddleButton相关的位

Left+Right  --> 00000011 --> 00000011 & 00000100 = 00000000 --> FALSE 
Left+Middle --> 00000011 --> 00000101 & 00000100 = 00000100 --> TRUE 

答案 1 :(得分:1)

问题是您将逻辑运算符&&与按位AND &运算符混合使用。他们不一样。例如

100 && 010 = True  (both numbers are not 0)
100 &  010 = False (gives 0)

仅检查bool(event->buttons() == 0),如果没有按下按钮,则会true;如果按任何按钮,则会false。要检查特定按钮,您需要使用按位'&'操作