1.新建父类 customparentdialog.h:
#ifndef CUSTOMPARENTDIALOG_H
#define CUSTOMPARENTDIALOG_H
#include <QDialog>
#include <QMouseEvent>
#include <QPoint>
class CustomParentDialog : public QDialog
{
Q_OBJECT
public:
explicit CustomParentDialog(QWidget *parent = 0);
virtual ~CustomParentDialog();
protected:
virtual void mouseMoveEvent(QMouseEvent *event); //鼠标拖动事件
virtual void mousePressEvent(QMouseEvent *event); //窗体按下事件
virtual void mouseReleaseEvent(QMouseEvent *event); //鼠标释放事件
private:
QPoint m_Point;
bool m_Pressed = false;
};
#endif // CUSTOMPARENTDIALOG_H
customparentdialog.cpp:
#include "customparentdialog.h"
#include <QMessageBox>
#include <QPushButton>
CustomParentDialog::CustomParentDialog(QWidget *parent) : QDialog(parent)
{
this->setWindowFlags(Qt::FramelessWindowHint|Qt::Dialog);
this->setAttribute(Qt::WA_TranslucentBackground);
}
CustomParentDialog::~CustomParentDialog()
{
}
void CustomParentDialog::mouseMoveEvent(QMouseEvent *event)
{
if (m_Pressed == true) //若鼠标左键被按下
{
QPoint curMousePoint = event->globalPos() - m_Point; //鼠标相对于屏幕的位置
move(curMousePoint); //移动主窗体位置
}
event->accept();
}
void CustomParentDialog::mousePressEvent(QMouseEvent *event)
{
m_Point = event->pos(); //鼠标相对于窗体的位置
if(m_Point.y() < 70) //只在标题顶部才可以拖动
m_Pressed = true; //鼠标按下
else
m_Pressed = false;
event->accept();
}
void CustomParentDialog::mouseReleaseEvent(QMouseEvent *event)
{
m_Pressed = false; //鼠标未按下
event->accept();
}
2.子类直接继承父类就行,不用实现什么方法。
dialoguserinfo.h:
#ifndef DIALOGUSERINFO_H
#define DIALOGUSERINFO_H
#include "Basicfunction/customparentdialog.h"
namespace Ui {
class DialogUserInfo;
}
class DialogUserInfo : public CustomParentDialog
{
Q_OBJECT
public:
explicit DialogUserInfo(QWidget *parent = 0);
~DialogUserInfo();
private:
Ui::DialogUserInfo *ui;
void init();
};
#endif // DIALOGUSERINFO_H
dialoguserinfo.cpp:
#include "dialoguserinfo.h"
#include "ui_dialoguserinfo.h"
DialogUserInfo::DialogUserInfo(QWidget *parent) :
CustomParentDialog(parent),
m_bMove(false),
ui(new Ui::DialogUserInfo)
{
ui->setupUi(this);
init();
}
DialogUserInfo::~DialogUserInfo()
{
delete ui;
}
void DialogUserInfo::init()
{
}
dialoguserinfo.ui文件不需要改。