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.删除父项时会自动删除子项.