Qt:父/子链中有多个窗口,父对象不会关闭子窗口?

前端之家收集整理的这篇文章主要介绍了Qt:父/子链中有多个窗口,父对象不会关闭子窗口?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在一个链中创建多个窗口:窗口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();
}

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",SLOT(on_button_clicked()));
}

void window1::on_button_clicked() {
    window2 *w = new window2(this);
    w->show();
}

window2.cpp

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

    QLabel* label = new QLabel("Window 2",this);
}
默认情况下,当最后一个主窗口(无父窗口)关闭时,QApplication退出(参见 QApplication::lastWindowClosed signal),
这就是为什么关闭你的MainWindow关闭一切.

关闭窗口小部件不会删除它,除非设置了属性Qt :: WA_DeleteOnClose(参见QWidget::close()).如果你只是希望你的窗口关闭,我想你必须重新实现closeEvent()来调用close()对孩子.

但是如果要在关闭删除它们,则设置属性Qt :: WA_DeleteOnClose.当父母被删除时,孩子们将被自动删除.

猜你在找的Windows相关文章