Qt 在哪里初始化WA_DeleteOnClose?
我有多个窗口,因此希望确保防止内存泄漏。 初始化Qt 在哪里初始化WA_DeleteOnClose?,qt,Qt,我有多个窗口,因此希望确保防止内存泄漏。 初始化WA_DeleteOnClose的正确方法是什么。例如,如果我要打开一个新窗口,我应该在当前窗口(this)和新窗口上执行setAttribute(Qt::WA_DeleteOnClose,true),如下所示 void Settings::on_commandLinkButton_clicked() { this->setAttribute(Qt::WA_DeleteOnClose,true); //---> current win
WA_DeleteOnClose
的正确方法是什么。例如,如果我要打开一个新窗口,我应该在当前窗口(this
)和新窗口上执行setAttribute(Qt::WA_DeleteOnClose,true)
,如下所示
void Settings::on_commandLinkButton_clicked()
{
this->setAttribute(Qt::WA_DeleteOnClose,true); //---> current window
this->close();
newwindow = new Patients(this);
newwindow ->setAttribute(Qt::WA_DeleteOnClose,true); //---> new window
newwindow -> show();
}
我刚刚用可能的组合做了一个测试 如果设置了
WA_DeleteOnClose
,则会立即调用析构函数。如果未设置
WA_DeleteOnClose
,并且该对话框是要删除的父项的子项,则该对话框将在其父项之前删除。这两种操作都可以完成,对话框仍然只删除一次 我的测试代码如下: dialog.cpp:
#include "dialog.h"
#include <QDebug>
Dialog::Dialog(const QString &name, QWidget *parent) : QDialog{parent}
{
m_name = name;
this->setWindowTitle(m_name);
qDebug() << "Constructing dialog" << m_name;
}
Dialog::~Dialog()
{
qDebug() << "Destructing dialog" << m_name;
}
#include "mainwindow.h"
#include "dialog.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
m_dialog_1 = new Dialog{"Alpha"};
m_dialog_1->setAttribute(Qt::WA_DeleteOnClose, true);
m_dialog_1->show();
m_dialog_2 = new Dialog{"Beta", this};
m_dialog_2->setAttribute(Qt::WA_DeleteOnClose, true);
m_dialog_2->show();
m_dialog_3 = new Dialog{"Charlie", this};
m_dialog_3->setAttribute(Qt::WA_DeleteOnClose, false);
m_dialog_3->show();
}
MainWindow::~MainWindow()
{
}