Qt 控件 拖拽

来源:互联网 发布:薄洗来 知乎 编辑:程序博客网 时间:2024/06/05 10:18

// bool envetFilter(QObject *, QEvent *evt);  *.h

// ui->label->installEventFilter(this);             构造函数

bool Widget::eventFilter(QObject *, QEvent *evt)

{
    static QPoint lastPnt;
    static bool isHover = false;
    if(evt->type() == QEvent::MouseButtonPress)
    {
        QMouseEvent* e = static_cast<QMouseEvent*>(evt);
        if(label->rect().contains(e->pos()) && //is the mouse is clicking the key
            (e->button() == Qt::LeftButton)) //if the mouse click the right key
        {
            lastPnt = e->pos();
            isHover = true;
        }
    }
    else if(evt->type() == QEvent::MouseMove && isHover)
    {
        QMouseEvent* e = static_cast<QMouseEvent*>(evt);
        int dx = e->pos().x() - lastPnt.x();
        int dy=e->pos().y()-lastPnt.y();
        label->move(label->x()+dx,label->y()+dy);
    }else if(evt->type() == QEvent::MouseButtonRelease && isHover)
    {
        isHover = false;
    }
    return false;
}
原创粉丝点击