我正在阅读 "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/