为什么这个程序正常运行并显示主窗口?我希望它退出,因为在构造函数中调用了quit()
。
Main.cpp的:
#include<QApplication>
#include"MainWindow.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
MainWindow.cpp:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
qApp->quit();
}
void MainWindow::closeEvent(QCloseEvent *)
{
qDebug("Hello world!");
}
答案 0 :(得分:8)
致电QCoreApplication::quit()
与致电QCoreApplication::exit(0)
相同。
如果你看一下后一个函数的docs:
调用此函数后,应用程序将离开main 事件循环并从对exec()的调用返回。 exec()函数 返回returnCode。 如果事件循环未运行,则此功能 什么都不做。
在您的示例中,当调用MainWindow
构造函数时,事件循环尚未启动,因此对quit()
的调用不执行任何操作。
答案 1 :(得分:8)
由于QCoreApplication::quit()
在启动事件循环之前是无操作,因此您需要将调用推迟到启动。因此,将延迟方法调用排队到quit()
。
以下几行是functionally identical,其中任何一行都可以使用:
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);