我正在阅读"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::LeftButton)
之间是否实际上有任何区别。你能解释一下吗?谢谢。 最佳答案
按位与运算符(&)将第一个操作数的每个位与第二个操作数的对应位进行比较。operator==
比较两个操作数以查看值是否相等。
也就是说,对您来说:
event->buttons() & Qt::LeftButton
如果
LeftButton
位置1,并且其他位置也可以设置,则为true。event->button() == Qt::LeftButton
如果仅设置
LeftButton
位,而不应设置其他位,则为true。有关其工作方式的示例:
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;
其输出将是:
The button right is pressed.
。 http://ideone.com/BunrTs