调用者类定义CallWidget.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_CallWidget.h"
#include "widget.hpp"
class CallWidget : public QMainWindow
{
Q_OBJECT
public:
CallWidget(QWidget *parent = Q_NULLPTR);
~CallWidget();
public slots:
void on_btn_slot(bool);
private:
Ui::CallWidgetClass ui;
//需要被弹出的页面
Widget * w1;
};
类CallWidget.cpp代码
#include "CallWidget.h"
#include <QDebug>
#include "widget.hpp"
CallWidget::CallWidget(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
resize(800, 600);
//构造器中,不能添加this,因为this,表示这个widget属于他的父亲.
w1 = new Widget();
connect(ui.pushButton, SIGNAL(clicked(bool)), this, SLOT(on_btn_slot(bool)));
}
CallWidget::~CallWidget()
{
qDebug() << "call ~callWidget";
delete w1;
}
void CallWidget::on_btn_slot(bool)
{
qDebug() << "on_btn_slot";
w1->resize(300, 200);
w1->show();
}
被调用者widget.cpp
#include "widget.hpp"
#include "QDebug"
Widget::Widget(QWidget * parent) : QWidget(parent) {
ui.setupUi(this);
qDebug() << "welcome to widget";
}
Widget::~Widget() {
/*qDebug() << "before delete ui";
delete &ui;
qDebug() << "after delete ui";*/
}
注意点:
widget页面,手动关闭时, 并不会 调用他自身的析构函数,所以想要释放widget 内存,只能在主页面 的析构函数中进行调用了。