c++ - 使用 Qt 鼠标功能时 '&' 和 '==' 之间的区别?

标签 c++ qt

我正在阅读 "scribble" 的 Qt 示例文档.在那里我偶然发现了以下代码:

 void ScribbleArea::mouseMoveEvent(QMouseEvent *event)
 {
     if ((event->buttons() & Qt::LeftButton) && scribbling)
         drawLineTo(event->pos());
 }

 void ScribbleArea::mouseReleaseEvent(QMouseEvent *event)
 {
     if (event->button() == Qt::LeftButton && scribbling) {
         drawLineTo(event->pos());
         scribbling = false;
     }
 }

我想到了一个问题,即 event->button() == Qt::LeftButton(event->buttons() & Qt::左键)。你能解释一下吗?谢谢。

最佳答案

按位与运算符 (&) 将第一个操作数的每一位与第二个操作数的相应位进行比较。

operator== 比较两个操作数以查看值是否相等。

也就是说,对你来说:

event->buttons() & Qt::LeftButton

如果设置了 LeftButton 位并且也可以设置其他位,则为真。

event->button() == Qt::LeftButton

如果仅设置了 LeftButton 位并且不应设置其他位,则为真。


有关其工作原理的示例:

enum
{
    BUTTON_LEFT = 1 << 0,
    BUTTON_RIGHT= 1 << 1,
    BUTTON_MID  = 1 << 2
};

int a = 0;
a |= BUTTON_LEFT;
a |= BUTTON_RIGHT;
a |= BUTTON_MID;

if ( a & BUTTON_RIGHT )
    std::cout << "The button right is pressed." << std::endl;

if ( a == BUTTON_RIGHT )
    std::cout << "There is only the button right." << std::endl;

此输出将是:按下右侧按钮。http://ideone.com/BunrTs

关于c++ - 使用 Qt 鼠标功能时 '&' 和 '==' 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18528029/

相关文章:

c++ - 无法创建我自己的日期类

c++ - 有没有特殊的方法可以从桌面上删除快捷方式?

c++ - 自动统计一个TMP中实例化类的个数?

c++ - 结构中的枚举

linux - 为什么 Qt::AA_DisableHighDpiScaling 不禁用高 DPI 缩放,为什么 Qt::AA_EnableHighDpiScaling 禁用它?

C++单例结构队列

c++ - 派生类作为模板参数有什么用?

c++ - Qt - 如何编译特定的插件/组件

qt - 如何在QML中自定义标题栏?

qt - QML 表格 View : Number formatting