Qt 不用记录鼠标是否按下的状态,就可实现左键按下拖动
其中 mCurrentPos 是一个 QPoint 类型的成员变量,记录鼠标左键按下时,窗体的位置。
event->buttons() 是一个用 bit 表示move 是由哪个按键发起的。
所以按位与 Qt::LeftButton 如果不为零,就表示当前的 move 事件是由左键触发的。
所以无需记录当前鼠标左键是否按下。
void ClassName::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { mCurrentPos = event->pos(); event->accept(); } } void ClassName::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() & Qt::LeftButton) { move(event->globalPos() - mCurrentPos); event->accept(); } }