加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-13 20:21:31 所属栏目:Windows 来源:网络整理
导读:我试图在一个链中创建多个窗口:窗口1是窗口2的父窗口,窗口2是窗口3的父窗口等.当我关闭一个窗口时,我希望所有的孩子也关闭.目前,如果我关闭顶级窗口,所有其他窗口都会关闭,如希望,但关闭,例如,窗口2,只关闭窗口2,而不是窗口3等.我该怎么做?谢谢你的帮助!
我试图在一个链中创建多个窗口:窗口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.当父母被删除时,孩子们将被自动删除.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读