Since QCoreApplication::quit()
is a no-op until the event loop has been started, you need to defer the call until it starts. Thus, queue a deferred method call to quit()
.
The following lines are functionally identical, either one will work:
QTimer::singleShot(0, qApp, &QCoreApplication::quit);
//or
QTimer::singleShot(0, qApp, SLOT(quit()));
// or - see https://stackoverflow.com/a/21653558/1329652
postToThread([]{ QCoreApplication::quit(); });
// or
QMetaObject::invokeMethod(qApp, "quit", Qt::QueuedConnection);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…