我有一個Qt應用程序,只有一個對話窗口。主要是這樣的:Q系統關閉時QApplication子對象沒有被破壞
QApplication a(argc, argv);
MyObject * myMobject = new QObject(&a);
MainWindow w;
w.show();
return a.exec();
MyObject
構造函數創建一個臨時文件,和析構函數刪除它。
當我通過關閉對話框正常關閉應用程序時,MyObject
析構函數按預期方式被調用,因爲它是QApplication
的子項,它在main()
的棧中分配。
但是,當用戶會話關閉時(註銷,關閉...),文件不會被刪除,表明MyObject
析構函數從不被調用。
這是什麼原因?我雖然Windows在會話關閉之前關閉了每個窗口,但看起來像我的進程已終止。
從文檔中,有QCoreApplication::aboutToQuit()
信號。但是這個文檔告訴Qt檢測到關機並退出事件循環,最終發出該信號。
如果確實如此,應該返回a.exec()
,就像窗口關閉時一樣,QApplication
應該與它的子節點一起銷燬,調用MyObject
析構函數。換句話說,因爲myObject
是a
的孩子,所以不應該有任何需要處理aboutToQuit()
信號。
http://stackoverflow.com/questions/19195935/how-to-detect-windows-shutdown-or-logoff-in-qt – AnatolyS
我在最後添加了一些關於此的信息。另一篇文章沒有回答這個問題 – galinette