При запуске следующий код:
int main(int argc, char **argv) {
QApplication application{argc, argv};
application.setQuitOnLastWindowClosed(true);
QLabel a("a");
a.setMinimumWidth(400);
a.show();
QLabel b("b");
b.setMinimumWidth(400);
b.show();
QTimer::singleShot(10000, [&]() { b.hide(); });
return application.exec();
}
Происходит следующее:
Когда я теперь закрываю окно «a» вручную, цикл события Qt завершается, даже если есть еще закрытое окно «b» (которое скрыто).
Зачем? Не должен ли Qt подождать, пока «b» не будет закрыт, а не только скрыт?
Редактировать:
Из документов на lastWindowClosed событие:
Этот сигнал испускается из QApplication :: exec (), когда закрывается последнее видимое главное окно (т.е. окно без родительского элемента) с набором атрибутов Qt :: WA_QuitOnClose.
Других решений пока нет …