qt 实现去掉标题栏之后(frameless)仍然可以拖动的对话框

movable-base-dialog.h

#ifndef MOVABLE_BASE_DLG_H
#define MOVABLE_BASE_DLG_H

#include <QDialog>

class QPoint;
class QPaintEvent;
class ZWWMovableDialog :public QDialog{
    Q_OBJECT
public:
    ZWWMovableDialog(QWidget* parent);
    ~ZWWMovableDialog(){};

signals:
       void mouseButtonMove(QPoint pos);
       void signalMainWindowMove();

protected:
    virtual void mouseReleaseEvent(QMouseEvent *event) override;
    virtual void mouseMoveEvent(QMouseEvent *event) override;
    virtual void mousePressEvent(QMouseEvent *event) override;

private:
    bool            m_Drag = false;
    QPoint          m_DragPosition;
};
#endif

movable-base-dialog.cpp

#include <QCloseEvent>
#include <QPoint>
#include <QPainter>
#include <QDebug>
#include <qmath.h>

#include "movable-base-dialog.h"

ZWWMovableDialog::ZWWMovableDialog(QWidget* parent)
:QDialog(parent)
{
}

void ZWWMovableDialog::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        m_Drag = true;
        m_DragPosition = event->globalPos() - this->pos();
        event->accept();
    }
    QDialog::mousePressEvent(event);
}

void ZWWMovableDialog::mouseMoveEvent(QMouseEvent *event)
{
    if (m_Drag && (event->buttons() && Qt::LeftButton)) {
        move(event->globalPos() - m_DragPosition);
        event->accept();
        emit mouseButtonMove(event->globalPos() - m_DragPosition);
        emit signalMainWindowMove();
    }
    QDialog::mouseMoveEvent(event);
}

void ZWWMovableDialog::mouseReleaseEvent(QMouseEvent *event)
{
    Q_UNUSED(event);
    m_Drag = false;
    QDialog::mouseReleaseEvent(event);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值