Qt自定义父窗口,子窗口继承父窗口属性

1.新建父类 customparentdialog.h:

#ifndef CUSTOMPARENTDIALOG_H
#define CUSTOMPARENTDIALOG_H

#include 
#include 
#include 

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 
#include 

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文件不需要改。

在阿富汗,有很多儿童,却没有童年。 《追风筝的人》

 

你可能感兴趣的:(♪,--,Qt,qt,开发语言)