QT 子窗体关闭或按钮返回父窗体(零基础保姆级)

QT 子窗体关闭或按钮返回父窗体(零基础保姆级最后完整代码和项目下载)

  • 功能

父窗体点击按钮打开子窗体并隐藏父窗体,子窗体点击返回按钮或者关闭按钮后销毁自己并返回父窗体

  • 效果展示
    在这里插入图片描述

创建项目MySub

在这里插入图片描述

设计UI

  • 打开uidesigner

    在这里插入图片描述

  • 设计父窗体ui

    在这里插入图片描述

  • 建立子窗体

    在这里插入图片描述

  • 设计子窗体UI

    在这里插入图片描述

子窗体代码

“subwidget.h”

#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>

namespace Ui {
class SubWidget;
}

class SubWidget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::SubWidget *ui;

signals:
    void subClose();
private:
    void closeEvent(QCloseEvent *){//重写关闭按钮事件
        emit subClose();//发出关闭信号,父窗体接收信号后显示窗体
    }
};

#endif // SUBWIDGET_H

“subwidget.cpp”

#include "subwidget.h"
#include "ui_subwidget.h"

SubWidget::SubWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SubWidget)
{
    ui->setupUi(this);
    //关联返回按钮点击事件与窗体关闭事件
    connect(ui->pushButton,&QPushButton::clicked,this,&SubWidget::close);
}

SubWidget::~SubWidget()
{
    delete ui;
}

父窗体代码

“widget.h”

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "subwidget.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

“widget.cpp”

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_clicked()
{
    this->hide();//当前窗体隐藏
    SubWidget *sub = new SubWidget();//新建子窗体
    connect(sub,&SubWidget::subClose,this,&QWidget::show);//关联子窗体关闭信号与父窗体显示事件
    sub->setAttribute(Qt::WA_DeleteOnClose);//设置子窗体属性:关闭即销毁
    sub->show();//显示子窗体
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值