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

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值