无边框QWidget的拖动

class LoginWidget : public QWidget
{
    Q_OBJECT

public:
    explicit LoginWidget(QWidget *parent = nullptr);
    ~LoginWidget()override;

private:
    Ui::LoginWidget *ui;
    QPoint dropPosition;
    bool leftPress;
protected:
    bool event(QEvent *event) override;

};

bool LoginWidget::event(QEvent *event)
{
    QMouseEvent* e = static_cast(event);
    if( e->type() == QEvent::MouseButtonPress && e->button() == Qt::LeftButton)
    {
        dropPosition = e->globalPos() - pos();
        leftPress = true;
    }else if(e->type() == QEvent::MouseMove )
    {
        if(leftPress)
        {
            move(e->globalPos() - dropPosition);
        }
    }else if( e->type() == QEvent::MouseButtonRelease && e->button() == Qt::LeftButton)
    {
        leftPress = false;
    }
    return QWidget::event(event);
}

你可能感兴趣的:(QT,qt)