为什么这个程序正常运行并显示主窗口?我希望它退出,因为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();
}
Run Code Online (Sandbox Code Playgroud)
MainWindow.cpp:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
qApp->quit();
}
void MainWindow::closeEvent(QCloseEvent *)
{
qDebug("Hello world!");
}
Run Code Online (Sandbox Code Playgroud)
由于QCoreApplication::quit()在启动事件循环之前是无操作,因此您需要将调用推迟到启动.因此,将延迟方法调用排入队列quit().
以下几行在功能上是相同的,任何一个都可以工作:
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);
Run Code Online (Sandbox Code Playgroud)