无边框时鼠标拖动界面

吴wuwu

关注

阅读 97

2022-01-26

1.创建继承自QWidget的派生类QXXX,并重载QWidget类的三个鼠标事件虚函数
void QWidget::mousePressEvent(QMouseEvent *event);
void QWidget::mouseMoveEvent(QMouseEvent *event);
void QWidget::mouseReleaseEvent(QMouseEvent *event);

2.声明变量
bool bMoving = false;
QPoint lstPos;

3.声明函数
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);

4.鼠标事件的实现
// 左键按下事件
void QXXX::mousePressEvent(QMouseEvent *event)
{
    if (Qt::LeftButton == event->button())
    {
        bMoving = true;
        lstPos = event->globalPos() - pos();
    }
    return QWidget::mousePressEvent(event);
}

// 鼠标移动事件
void QXXX::mouseMoveEvent(QMouseEvent *event)
{
    if (bMoving && (event->buttons() && Qt::LeftButton) && 
    ((event->globalPos() - lstPos).manhattanLength() > QApplication::startDragDistance()))
    {
        move(event->globalPos() - lstPos);
        lstPos = event->globalPos() - pos();
    }
    return QWidget::mouseMoveEvent(event);
}

// 鼠标释放事件
void QXXX::mouseReleaseEvent(QMouseEvent *event)
{
    bMoving = false;
}

精彩评论(0)

0 0 举报