Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 在哪里初始化WA_DeleteOnClose?_Qt - Fatal编程技术网

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()
{
}