Próbuję utworzyć wiele okien w łańcuchu: okno 1 jest rodzicem okna 2, okno 2 jest rodzicem okna 3 itd. Kiedy zamykam jedno okno, chciałbym, aby wszystkie jego dzieci również się zamknęły. Obecnie, gdy zamykam okno najwyższego poziomu, wszystkie inne zamykają się, tak jak się spodziewano, ale zamykając, na przykład, okno 2, zamyka tylko okno 2, nie okno 3 itp. Jak powinienem to robić? Dzięki za pomoc!Qt: Wiele okien w łańcuchu nadrzędnym/podrzędnym, rodzic nie zamyka dzieci?
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", this);
connect(button, SIGNAL(clicked()), this, 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);
}
To wystarczy! Dodanie "w-> setAttribute (Qt :: WA_DeleteOnClose);" w mainwindow.cpp powyżej pracował. Cieszę się, że nie musiałem ponownie wdrażać closeEvent. Dzięki! – ishmael
Nie wiedziałem, że widget nie jest domyślnie usuwany przy zamknięciu. Jest to pomocne. W jakiś sposób ustawienie atrybutu okna na WA_DeleteOnClose dla mojego okna PySide rozwiązało problem z uszkodzeniem segmentacji. Teraz po prostu muszę dowiedzieć się, dlaczego ... – lightalchemist