根据“成功退出”的含义,最直接的方法是检查exec()
. 您可以通过使用exit(int returnCode)
而不是quit()
退出您的应用程序来控制它。
由于您想等待所有 QObjects 被破坏,因此一种简单的方法是将 QApplication 包装到一个范围中,例如:
int main(int argc, char *argv[]) {
int returnCode = 127; // choose whatever sentinel value
{
// put all Qt stuff in this scope
QApplication app(argc, argv);
//...
returnCode = app.exec();
// if there are any raw pointer heap QObjects without parent, delete them here
}
if (returnCode != 0) {
std::cerr << "Error, exit code: " << returnCode << std::endl;
}
// do whatever cleanup you want to do after Qt stuff has been shut down
// or signal the other thread, or whatever
return returnCode;
}
但是,正如 docs 中所说exec()
,应用程序可能会在它有机会从事件循环返回之前被杀死,即使在计算机关闭时的“正常”使用中也是如此。但我不确定你能做些什么,除了连接aboutToQuit()
信号以更早地捕捉退出,也许做一些像刷新所有打开的文件等,以避免数据损坏。
如果您对这样做不满意,还有旧的atexit()
.