Qt 为什么在exec()之前调用quit()不能退出应用程序?

Qt 为什么在exec()之前调用quit()不能退出应用程序?,qt,Qt,为什么该程序正常运行并显示主窗口?我希望它退出,因为在构造函数中调用了quit Main.cpp: 调用QCoreApplication::quit与调用QCoreApplication::exit0相同 如果您查看后一个函数的 调用此函数后,应用程序将离开主 事件循环并从调用exec返回。exec函数 返回返回代码。如果事件循环未运行,则此函数 什么也不做 在您的示例中,调用MainWindows构造函数时事件循环尚未启动,因此对quit的调用不起任何作用。由于QCoreApplication

为什么该程序正常运行并显示主窗口?我希望它退出,因为在构造函数中调用了quit

Main.cpp:

调用QCoreApplication::quit与调用QCoreApplication::exit0相同

如果您查看后一个函数的

调用此函数后,应用程序将离开主 事件循环并从调用exec返回。exec函数 返回返回代码。如果事件循环未运行,则此函数 什么也不做

在您的示例中,调用MainWindows构造函数时事件循环尚未启动,因此对quit的调用不起任何作用。

由于QCoreApplication::quit在事件循环启动之前是一个no op,因此您需要将调用推迟到启动。因此,将延迟的方法调用排队退出

以下几行是,其中一行可以工作:

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);
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
   qApp->quit();
}

void MainWindow::closeEvent(QCloseEvent *)
{
    qDebug("Hello world!");
}
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);