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();
    }
}

 

posted on 2020-12-16 13:19  liujx2019  阅读(778)  评论(0编辑  收藏  举报

导航