Qt:父/子链中的多个窗口,父母不关闭孩子?

ish*_*ael 17 windows qt parent

我试图在链中创建多个窗口:窗口1是窗口2的父窗口,窗口2是窗口3的父窗口等.当我关闭一个窗口时,我希望它的所有子窗口也关闭.目前,如果我关闭顶级窗口,所有其他窗口关闭,如希望,但关闭,例如,窗口2,只关闭窗口2,而不是窗口3,等等.我应该怎么做?谢谢你的帮助!

main_window.cpp

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    QPushButton* button = new QPushButton("Open 1", this);
    connect(button, SIGNAL(clicked()), this, SLOT(on_button_clicked()));
}

void MainWindow::on_button_clicked() {
    window1 *w = new window1(this);
    w->show();
}
Run Code Online (Sandbox Code Playgroud)

window1.cpp

window1::window1(QWidget *parent) : QWidget(parent)
{
    this->setWindowFlags(Qt::Window); // in order to have a free-standing window

    QPushButton* button = new QPushButton("Open 2", this);
    connect(button, SIGNAL(clicked()), this, SLOT(on_button_clicked()));
}

void window1::on_button_clicked() {
    window2 *w = new window2(this);
    w->show();
}
Run Code Online (Sandbox Code Playgroud)

window2.cpp

window2::window2(QWidget *parent) : QWidget(parent)
{
    this->setWindowFlags(Qt::Window);

    QLabel* label = new QLabel("Window 2", this);
}
Run Code Online (Sandbox Code Playgroud)

Lei*_*iaz 17

默认情况下,QApplication在最后一个主窗口(没有父窗口)关闭时退出(请参阅QApplication :: lastWindowClosed信号),这就是关闭MainWindow关闭所有内容的原因.

关闭窗口小部件不会删除它,除非设置了属性Qt :: WA_DeleteOnClose(请参阅QWidget :: close()).如果你只想让你的窗户关闭,我认为你必须重新实现closeEvent()来调用孩子们的close().

但是如果要在关闭时删除它们,请设置属性Qt :: WA_DeleteOnClose.删除父项时会自动删除子项.