我使用Qt已经有一段时间了,我正在做的一些事情正在发挥作用,但我不明白为什么,就像这样:
(event->buttons() & Qt::MiddleButton)
这会在按下MiddleButton时返回true
,但我的问题是语法,Qt说Qt :: MiddleButton的值为4,因此布尔值总是返回true,这意味着表达式相当于:(event->buttons())
......那也不符合逻辑......有人可以解释一下吗?
答案 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
。要检查特定按钮,您需要使用按位'&'操作