Qt::Application::exec does not return exit code from Qt::Application::exit

概念理解不透側導致,我們先看這兩個API在Qt中的含義:

  • void QApplication::exit ( int retcode = 0 ) [靜態]
      告訴應用程序退出,伴隨一個返回代碼。在這個函數被調用之後,應用程序離開主事件循環並且從exec()調用之後返回。exec()函數返回retcode。根據習慣,爲0的retcode意味着成功,並且任何非零的值意味着錯誤。注意與同名的C庫函數不同,這個函數返回到調用者——它的事件處理結束。

  • int QApplication::exec ()
      進入主事件循環並且等待,直到exit()被調用或者主窗口部件被銷燬,並且返回值被設置爲exit()(如果通過quit()調用exit(),retcode爲0)。需要調用這個函數來開始事件處理。主事件循環從窗口系統中接收事件並且把它們分派給應用程序窗口部件。通常來說,在調用exec()之前,沒有用戶交互可以發生。作爲一個特例,像QMessageBox這樣的模式對話框可以在調用exec()之前使用,因爲模式對話框調用exec()來開始本地事件循環。爲了使你的應用程序執行空閒處理,例如,只要沒有未處理地事件,執行一個特殊的函數,使用QTimer,0超時。更高級的空閒處理方案可以使用processEvents()來完成。

問題關鍵點的一句話:If the event loop is not running, this function does nothing.
意思就是,如果exit()沒有在循環事件中,則exit()函數什麼都不會做。也就是你需要用一個線程或者信號來觸發這個exit(),而函數構造的時候不應該執行exit(),即使執行了,也是在主事件循環等待之前,是不會將結果返回給exec()的。

參考資料:http://www.qtcentre.org/threads/19706-Exiting-a-Qt-Console-Application
https://forum.qt.io/topic/36208/solved-console-application-does-not-exit

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章