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

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

  • 功能

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

  • 效果展示
    QT 子窗体关闭或按钮返回父窗体(零基础保姆级)_第1张图片

创建项目MySub

QT 子窗体关闭或按钮返回父窗体(零基础保姆级)_第2张图片

设计UI

  • 打开uidesigner

    QT 子窗体关闭或按钮返回父窗体(零基础保姆级)_第3张图片

  • 设计父窗体ui

  • 建立子窗体

  • 设计子窗体UI

子窗体代码

“subwidget.h”

#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include 

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 
#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();//显示子窗体
}

你可能感兴趣的:(qt,ui,开发语言,c++)