setQuitOnLastWindowClosed(true):是 widget.hide() == widget.close()?
setQuitOnLastWindowClosed(true): Is widget.hide() == widget.close()?
当运行以下代码时:
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();
}
发生以下情况:
- Qt打开一个window"a"和一个window"b"
- 10 秒后,Qt 在 10 秒后隐藏 window"b"。
当我现在手动关闭 window "a" 时,Qt 事件循环退出,即使还有一个未关闭的 window "b" (这是隐藏的)。
为什么? Qt不应该等到"b"关闭,不仅隐藏吗?
编辑:
来自 lastWindowClosed 事件的文档:
This signal is emitted from QApplication::exec() when the last visible primary window (i.e. window with no parent) with the Qt::WA_QuitOnClose attribute set is closed.
当运行以下代码时:
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();
}
发生以下情况:
- Qt打开一个window"a"和一个window"b"
- 10 秒后,Qt 在 10 秒后隐藏 window"b"。
当我现在手动关闭 window "a" 时,Qt 事件循环退出,即使还有一个未关闭的 window "b" (这是隐藏的)。
为什么? Qt不应该等到"b"关闭,不仅隐藏吗?
编辑: 来自 lastWindowClosed 事件的文档:
This signal is emitted from QApplication::exec() when the last visible primary window (i.e. window with no parent) with the Qt::WA_QuitOnClose attribute set is closed.